2017-08-29 3 views
0

Est-il possible de créer une vue personnalisée que les deux remplacements fonctionnent onTouch() dans cette implémentation de vue personnalisée, et permet de définir GestureDetector personnalisé via setOnTouchListener().CustomView redéfinissant onTouch() et définissant GestureDetector supplémentaire via setOnTouchListener()

  1. Je voudrais remplacer la méthode onTouch() pour implémenter une certaine logique de dessin dans la vue liée aux mouvements tactiles. Que je voudrais utiliser cette vue personnalisée autonome pour attacher à GestureDetector pour détecter et gérer certains gestes personnalisés sur cette vue dans Activity.

Cela fonctionne pour moi seulement si j'ai l'implémentation de dessin onTouch(), ou seulement setOnTouchListener() pour détecter les gestes. Peut-être que je pourrais placer cette détection de geste à l'intérieur de la vue. Mais je préférerais avoir ceci en tant que composant séparé réutilisable lâchement séparé plutôt que le détecteur de geste étroitement couplé.

Répondre

1

Vous pouvez faire somethink comme ceci:

public class CustomTouchView extends View { 

    private OnTouchListener onTouchListener; 

    public CustomTouchView(Context context) { 
     super(context); 
    } 

    @Override 
    public void setOnTouchListener(OnTouchListener l) { 
     super.setOnTouchListener(l); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
     if (onTouchListener != null) { 
      return onTouchListener.onTouch(this, event); 
     } else { 
      return super.onTouchEvent(event); 
     } 

     // or implement your custom touch logic here 
    } 
} 
+0

Cela me conduire à une solution, je pense. J'ai utilisé le constructeur de CustomTouchView() setOnTouchListener (this) et implémentons onTouch(). Donc, je fais à la place du champ privé personnalisé TouchViewGestureDetector, et j'ajoute la méthode setter setTouchViewGestureDetector (détecteur). Puis, à l'intérieur de la commande onTouch de CustomTouchView, j'ai ajouté if (mGestureDetector! = Null) mGestureDetector.onTouch (event); –

+0

@ MichałZiobro n'hésitez pas à marquer ma réponse si elle vous a aidé. Merci –