如何在长按手势回调方法里获取手指触摸点的坐标
在Android开发中,如果你想在长按手势(LongPress Gesture)的回调方法里获取手指触摸点的坐标,你可以使用MotionEvent
对象,该对象包含了触摸事件的信息。下面是一个简单的例子,展示了如何在onLongPress
方法里获取触摸点的坐标:
// 假设你有一个View,并且你已经为它设置了一个长按监听器
final View myView = findViewById(R.id.my_view);
myView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// 获取触摸点的坐标
float x = v.getX() + v.getWidth() / 2;
float y = v.getY() + v.getHeight() / 2;
// 打印坐标
Log.d("LongPress", "X: " + x + ", Y: " + y);
return true; // 表示长按事件已被处理
}
});
在这个例子中,v.getX()
和v.getY()
返回的是View的中心点坐标。如果你需要获取触摸点的原始坐标,你需要使用MotionEvent
对象。你可以通过覆盖onTouchEvent
方法并在其中处理长按事件来实现这一点:
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
// 记录按下时的时间
downTime = SystemClock.uptimeMillis();
break;
case MotionEvent.ACTION_UP:
// 计算按下和抬起之间的时间
long duration = SystemClock.uptimeMillis() - downTime;
if (duration > LONG_PRESS_THRESHOLD) { // LONG_PRESS_THRESHOLD是一个常量,表示长按的阈值,通常是500毫秒
// 获取触摸点的坐标
float x = event.getX();
float y = event.getY();
// 打印坐标
Log.d("LongPress", "X: " + x + ", Y: " + y);
return true; // 表示触摸事件已被处理
}
break;
}
return super.onTouchEvent(event);
}
在这个例子中,event.getX()
和event.getY()
返回的是触摸点的原始坐标。你可以根据需要在长按事件发生时执行其他操作。
使用组合手势的顺序识别,当长按手势事件结束后触发拖动手势事件。在手势回调方法里获取event(GestureEvent类型)的fingerList(FingerInfo类型),获取到localX和localY数值,表示相对于当前组件元素原始区域左上角的坐标地址。可参考如下代码: