Comment utiliser la Vue.OnTouchListener au lieu de onClick
je développe une application Android 2.2.2 Pour un client et il veut faire ce qui suit:
Maintenant, j'ai un bouton avec un événement onClick, mais il n'aime pas, il veut déctection lorsque l'utilisateur relâchez le bouton.
j'ai trouvé vue.OnTouchListener ce que je pense que c'est ce que j'ai besoin d'utiliser mais, y a-t-il une posibilité pour ajouter cet événement au xml comme je l'ai fait 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:
ce Qui est l'événement associé lorsque l'utilisateur relâche son doigt?
Existe-t-il des lignes directrices interdisant l'utilisation de View.OnTouchListener
au lieu de onClick
?
3 réponses
Le cas lorsque l'utilisateur relâche son doigt MotionEvent.ACTION_UP
. Je ne sais pas s'il y a des lignes directrices qui interdisent 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;
}
});
a priori, si l'on veut utiliser un OnTouchListener
plutôt que OnClickListener
, puis la fonctionnalité supplémentaire du OnTouchListener
est nécessaire. Il s'agit d'une réponse supplémentaire pour montrer plus de détails sur la façon dont un OnTouchListener
peut être utilisé.
Définir l'auditeur
mettez ceci quelque part dans votre activité ou 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
mettez l'écouteur dans onCreate
(pour une Activité) ou onCreateView
(pour un Fragment.)
myView.setOnTouchListener(handleTouch);
Notes
getX
etgetY
vous donner les coordonnées par rapport à la vue (c'est le coin supérieur gauche de la vue). Ils seront négatifs en se déplaçant au-dessus ou à gauche de votre vue. UtilisezgetRawX
etgetRawY
si vous voulez les coordonnées absolues de l'écran.- Vous pouvez utiliser le
x
ety
valeurs pour déterminer des choses comme la direction de balayage.
OnClick est déclenché lorsque l'utilisateur relâche le bouton. Mais si vous voulez toujours utiliser le TouchListener, vous devez l'ajouter en code. C'est juste:
myView.setOnTouchListener(new View.OnTouchListener()
{
// Implementation;
});