我有一个从View派生的自定义视图。我希望在视图被单击时得到通知,以及单击发生的x,y位置。长点击也是如此。
看起来要这样做,我需要重写onTouchEvent()
。但是,有没有办法从OnClickListener
中获取事件的x,y位置呢?
如果不是,有什么好方法来判断一个运动事件是否是“真正的”点击还是长点击等等?onTouchEvent
会快速连续地生成许多事件,等等。
发布于 2010-10-26 19:48:35
谢谢。这正是我要找的。我现在的代码是:
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;
}
});
这正是马克所要求的..。
发布于 2009-12-28 05:06:52
覆盖onTouchEvent(MotionEvent ev)
然后您可以执行以下操作:
ev.getXLocation()
或者类似的东西。喝一杯吧。
发布于 2020-01-28 01:14:15
您可以在Kotlin中创建一个扩展函数,如下所示:
fun View.setOnClickListenerWithPoint(action: (Point) -> Unit) {
val coordinates = Point()
val screenPosition = IntArray(2)
setOnTouchListener { v, event ->
if (event.action == MotionEvent.ACTION_DOWN) {
v.getLocationOnScreen(screenPosition)
coordinates.set(event.x.toInt() + screenPosition[0], event.y.toInt() + screenPosition[1])
}
false
}
setOnClickListener {
action.invoke(coordinates)
}
}
如果您需要长时间点击-只需替换setOnClickListener
我使用getLocationOnScreen()
是因为我需要RecyclerView的ViewHolder的坐标
https://stackoverflow.com/questions/1967039
复制相似问题