OnClickListener – emplacement x, y de l’événement?

J’ai une vue personnalisée dérivée de View. Je voudrais être averti lorsque l’utilisateur clique sur la vue et sur l’emplacement x, y de l’endroit où le clic s’est produit. Même chose pour les longs clics.

On dirait faire ceci, j’ai besoin de remplacer onTouchEvent() . N’y a-t-il aucun moyen d’obtenir l’emplacement x, y de l’événement à partir d’un OnClickListener ?

Si non, quel est un bon moyen de savoir si un événement de mouvement est un “clic” réel par rapport à un clic long, etc.? Le onTouchEvent génère de nombreux événements en succession rapide, etc.

Je vous remercie. C’était exactement ce que je cherchais. Mon code est maintenant:

 imageView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_DOWN){ textView.setText("Touch coordinates : " + Ssortingng.valueOf(event.getX()) + "x" + Ssortingng.valueOf(event.getY())); } return true; } }); 

qui fait précisément ce que demandait Mark …

Exemple complet

Les autres réponses manquent de certains détails. Voici un exemple complet.

 public class MainActivity extends AppCompatActivity { // class member variable to save the X,Y coordinates private float[] lastTouchDownXY = new float[2]; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // add both a touch listener and a click listener View myView = findViewById(R.id.my_view); myView.setOnTouchListener(touchListener); myView.setOnClickListener(clickListener); } // the purpose of the touch listener is just to store the touch X,Y coordinates View.OnTouchListener touchListener = new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { // save the X,Y coordinates if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { lastTouchDownXY[0] = event.getX(); lastTouchDownXY[1] = event.getY(); } // let the touch event pass on to whoever needs it return false; } }; View.OnClickListener clickListener = new View.OnClickListener() { @Override public void onClick(View v) { // resortingeve the stored coordinates float x = lastTouchDownXY[0]; float y = lastTouchDownXY[1]; // use the coordinates for whatever Log.i("TAG", "onLongClick: x = " + x + ", y = " + y); } }; } 

Résumé

  • Ajouter une variable de classe pour stocker les coordonnées
  • Enregistrer les coordonnées X, Y à l’aide d’un OnTouchListener
  • Accédez aux coordonnées X, Y dans OnClickListener

Remplacer onTouchEvent (MotionEvent ev)

Ensuite, vous pouvez faire:

 ev.getXLocation() 

Ou quelque chose comme ça. Avoir un butch.