Je développe une application Android 2.2.2 pour un client et il souhaite procéder comme suit:
Maintenant, j'ai un bouton avec un événement onClick mais il n'aime pas, il veut détecter quand l'utilisateur relâche le bouton.
J'ai trouvé View.OnTouchListener que je pense que c'est ce que je dois utiliser, mais existe-t-il une possibilité d'ajouter cet événement à xml comme avec onClick?
<ImageButton
Android:id="@+id/btnSaveNewGate"
Android:layout_width="@dimen/btnSaveNewGate_width"
Android:layout_height="@dimen/btnSaveNewGate_height"
Android:layout_below="@+id/radioGrGateType"
Android:layout_centerHorizontal="true"
Android:layout_marginTop="@dimen/btnSaveNewGate_marginTop"
Android:background="@null"
Android:contentDescription="@string/layout_empty"
Android:onClick="onSaveNewGateClick"
Android:scaleType="fitXY"
Android:src="@drawable/save_gate_selector" />
J'ai encore deux questions:
Quel est l'événement associé lorsque l'utilisateur relâche son doigt?
Existe-t-il des directives interdisant l'utilisation de View.OnTouchListener
au lieu de onClick
?
L'événement lorsque l'utilisateur relâche son doigt est MotionEvent.ACTION_UP
. Je ne sais pas s'il existe des directives interdisant l'utilisation de View.OnTouchListener au lieu de onClick (), cela dépend très probablement de la situation.
Voici un exemple de code:
imageButton.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_UP){
// Do what you want
return true;
}
return false;
}
});
Vraisemblablement, si on veut utiliser un OnTouchListener
plutôt qu'un OnClickListener
, alors la fonctionnalité supplémentaire de OnTouchListener
est nécessaire. Ceci est une réponse supplémentaire pour montrer plus en détail comment un OnTouchListener
peut être utilisé.
Définir l'auditeur
Mettez ceci quelque part dans votre activité ou votre fragment.
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;
}
};
Définir l'auditeur
Définissez le programme d'écoute dans onCreate
(pour une activité) ou onCreateView
(pour un fragment).
myView.setOnTouchListener(handleTouch);
Notes
getX
et getY
vous donnent les coordonnées relatives à la vue (c'est-à-dire le coin supérieur gauche de la vue). Ils seront négatifs si vous vous déplacez au-dessus ou à gauche de votre vue. Utilisez getRawX
et getRawY
si vous voulez les coordonnées absolues de l’écran.x
et y
pour déterminer des éléments tels que la direction du balayage.OnClick est déclenché lorsque l'utilisateur relâche le bouton. Mais si vous souhaitez toujours utiliser TouchListener, vous devez l'ajouter dans le code. C'est juste:
myView.setOnTouchListener(new View.OnTouchListener()
{
// Implementation;
});