J'ai trouvé une bonne classe d'écoute sur internet pour faire un OnSwipeTouchListener. Cet écouteur peut d'une durée déterminée lorsque l'utilisateur fait un simple glissement vers le bas, en haut, à gauche ou à droite:Faire la lettre L avec OnSwipeTouchListener
public class OnSwipeTouchListener implements View.OnTouchListener {
private GestureDetector gestureDetector;
protected OnSwipeTouchListener(Context c) {
gestureDetector = new GestureDetector(c, new GestureListener());
}
public boolean onTouch(final View view, final MotionEvent motionEvent) {
return gestureDetector.onTouchEvent(motionEvent);
}
private final class GestureListener extends GestureDetector.SimpleOnGestureListener {
private static final int SWIPE_THRESHOLD = 100;
private static final int SWIPE_VELOCITY_THRESHOLD = 100;
@Override
public boolean onDown(MotionEvent e) {
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
try {
float diffY = e2.getY() - e1.getY();
float diffX = e2.getX() - e1.getX();
if (Math.abs(diffX) > Math.abs(diffY)) {
if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
if (diffX > 0) {
onSwipeRight();
} else {
onSwipeLeft();
}
}
} else {
if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
if (diffY > 0) {
onSwipeDown();
} else {
onSwipeUp();
}
}
}
} catch (Exception exception) {
exception.printStackTrace();
}
return false;
}
}
public void onSwipeRight() {
}
public void onSwipeLeft() {
}
public void onSwipeUp() {
}
public void onSwipeDown() {
}
}
Voilà comment je l'utilise:
findViewById(R.id.framelayout).setOnTouchListener(new OnSwipeTouchListener(this) {
@Override
public void onSwipeDown() {
Toast.makeText(MainActivity.this, "Down", Toast.LENGTH_SHORT).show();
}
@Override
public void onSwipeLeft() {
Toast.makeText(MainActivity.this, "Left", Toast.LENGTH_SHORT).show();
}
@Override
public void onSwipeUp() {
Toast.makeText(MainActivity.this, "Up", Toast.LENGTH_SHORT).show();
}
@Override
public void onSwipeRight() {
Toast.makeText(MainActivity.this, "Right", Toast.LENGTH_SHORT).show();
}
});
Maintenant, je voudrais ajouter la fonction onSwipeL (). Cette fonction est quand l'utilisateur fait la lettre L avec le doigt, c'est comme onSwipeDown() + onSwipeRight().
Le meilleur serait de faire la fonction onSwipeDoubleL(). C'est quand l'utilisateur fait un double L inversé avec ses doigts. Il est comme en même temps à faire:
- onSwipeDown() + onSwipeRight()
- onSwipeDown() + onSwipeLeft()
Est-ce possible?
J'ai le message "Ouais, ça ressemble à double L" tout le temps quand je touche l'écran. –
C'est bizarre. J'ai testé l'application dans 2 appareils, tout fonctionne bien. Avez-vous copié mon code correctement? Ou changer quelque chose?Il ne peut pas faire de message avec le toucher car movingSuccessL et movingSuccessR sont toujours faux –
Maintenant, cela fonctionne désolé. Le problème est: si je mets un débogage par exemple je vois plusieurs fois mon débogage quand je fais le double L. C'est un gros problème car il faut que j'appelle un fragment après ça et l'app appelle plusieurs fois ce fragment. Comment puis-je faire pour appeler seulement 1 fois? –