OnClickListener – x,y事件的位置?

我有一个从视图派生的自定义视图。 我希望在点击视图时得到通知,并且点击发生的位置在x,y位置。 长时间点击也一样。

看起来像这样做,我需要重写onTouchEvent() 。 但是,没有办法从OnClickListener事件的x,y位置吗?

如果不是的话,如果一个动作事件是一个“真正的”点击还是一个长时间的点击动作,那么有什么好的方法呢? onTouchEvent快速连续生成许多事件。

谢谢。 那正是我所期待的。 我现在的代码是:

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

这正是Mark要求的…

覆盖onTouchEvent(MotionEvent ev)

那你可以这样做:

 ev.getXLocation() 

或类似的东西。 有一个butches。

完整的例子

其他的答案是缺less一些细节。 这是一个完整的例子。

 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) { // retrieve the stored coordinates float x = lastTouchDownXY[0]; float y = lastTouchDownXY[1]; // use the coordinates for whatever Log.i("TAG", "onLongClick: x = " + x + ", y = " + y); } }; } 

概要

  • 添加一个类variables来存储坐标
  • 使用OnTouchListener保存X,Y坐标
  • 访问OnClickListener的X,Y坐标