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坐标