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?

33
demandé sur VansFannel 2012-07-27 19:02:54

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;
    }
});
57
répondu Andy Res 2012-07-27 15:12:21

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 et getY 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. Utilisez getRawX et getRawY si vous voulez les coordonnées absolues de l'écran.
  • Vous pouvez utiliser le x et y valeurs pour déterminer des choses comme la direction de balayage.
8
répondu Suragch 2016-09-20 07:59:39

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;
});
5
répondu CaseyB 2012-07-27 15:07:00