J'essaie de détecter quand une direction de balayage a été modifiée pendant que l'utilisateur continue à glisser sur l'écran.Android OnTouch glisser vers le haut/vers le bas changement de direction
J'ai quelque chose comme ça (très basique) pour détecter la direction de balayage:
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
int action = motionEvent.getActionMasked();
switch (action) {
case MotionEvent.ACTION_DOWN: {
Log.d(TAG, "onTouch: DOWN _Y = " + motionEvent.getRawY());
mLastTouchY = mPrevTouchY = motionEvent.getRawY();
break;
}
case MotionEvent.ACTION_MOVE: {
Log.d(TAG, "onTouch: MOVE _Y = " + motionEvent.getRawY());
final float dy = motionEvent.getRawY();
if (dy >= mLastTouchY) {
/* Move down */
} else {
/* Move up */
}
break;
}
case MotionEvent.ACTION_CANCEL:
case MotionEvent.ACTION_OUTSIDE:
case MotionEvent.ACTION_UP: {
Log.d(TAG, "onTouch: UP _Y = " + motionEvent.getRawY());
// snap page
break;
}
}
return true;
}
Ce que je dois est de détecter réellement lorsque l'utilisateur a changé la direction du glissement. Par exemple, le code ci-dessus échoue pour détecter certains cas limites:
- à partir de Y = 100,
- déplacer vers le bas jusqu'à 150,
- déplacer jusqu'à 50,
- déplacer à nouveau jusqu'à 90
Ce sera détecté comme une balayez vers le haut, car initial Y est supérieure à la dernière Y
Si vous commencez à y = 100, comment iriez-vous jusqu'à y = 150? –
Désolé, j'ai foiré les directions, il est mis à jour maintenant. –
Ce que vous obtenez est en réalité vrai .... Si vous voulez juste la dernière direction du balayage (ce que je comprends de la question), vous devez l'appliquer différemment. –