J'ai besoin d'obtenir la position de début tactile (X, Y), la position de déplacement tactile et la position finale tactile de l'écran sous Android.
Réponses:
@Override
public boolean onTouchEvent(MotionEvent event)
{
int x = (int)event.getX();
int y = (int)event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_UP:
}
return false;
}
Les trois cas sont pour que vous puissiez réagir à différents types d'événements, dans cet exemple en appuyant ou en faisant glisser ou en soulevant à nouveau le doigt.
Étant donné un OnTouchListener
private View.OnTouchListener handleTouch = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
Log.i("TAG", "touched down");
break;
case MotionEvent.ACTION_MOVE:
Log.i("TAG", "moving: (" + x + ", " + y + ")");
break;
case MotionEvent.ACTION_UP:
Log.i("TAG", "touched up");
break;
}
return true;
}
};
mis sur une vue:
myView.setOnTouchListener(handleTouch);
Cela vous donne les coordonnées de l'événement tactile par rapport à la vue à laquelle l'écouteur tactile lui est attribué. Le coin supérieur gauche de la vue est (0, 0). Si vous déplacez votre doigt au-dessus de la vue, ce ysera négatif. Si vous déplacez votre doigt à gauche de la vue, ce xsera négatif.
int x = (int)event.getX();
int y = (int)event.getY();
Si vous voulez les coordonnées relatives au coin supérieur gauche de l'écran de l'appareil, utilisez les valeurs brutes.
int x = (int)event.getRawX();
int y = (int)event.getRawY();
return falsesinon cela consommera le toucher.
getRawX()et getRawY()doit renvoyer les coordonnées absolues de la position tactile sur toute vue à laquelle l'auditeur est ajouté. Mais vous avez raison, s'il y a une autre vue au-dessus qui revient true, alors aucune vue inférieure ne sera notifiée des événements tactiles.
getX()et getY()fonctionne très bien (pas besoin de getRawX/Y()).
onInterceptTouchEventpuis revenir falsepour que l'événement soit traité normalement.
Voici le style Koltin, je l'utilise dans mon projet et cela fonctionne très bien:
this.yourview.setOnTouchListener(View.OnTouchListener { _, event ->
val x = event.x
val y = event.y
when(event.action) {
MotionEvent.ACTION_DOWN -> {
Log.d(TAG, "ACTION_DOWN \nx: $x\ny: $y")
}
MotionEvent.ACTION_MOVE -> {
Log.d(TAG, "ACTION_MOVE \nx: $x\ny: $y")
}
MotionEvent.ACTION_UP -> {
Log.d(TAG, "ACTION_UP \nx: $x\ny: $y")
}
}
return@OnTouchListener true
})