在安卓中检测长按
2022-08-31 11:41:33
我目前正在使用来检测用户何时按下我的glSurfaceView是否有一种方法可以检测何时进行长按。onTouchEvent(MotionEvent event) { }
我猜如果我在开发文档中找不到太多东西,那么这将是某种围绕方法的工作。比如注册并查看之前多长时间。ACTION_DOWN
ACTION_UP
你如何使用opengl-es在Android上检测长按?
我目前正在使用来检测用户何时按下我的glSurfaceView是否有一种方法可以检测何时进行长按。onTouchEvent(MotionEvent event) { }
我猜如果我在开发文档中找不到太多东西,那么这将是某种围绕方法的工作。比如注册并查看之前多长时间。ACTION_DOWN
ACTION_UP
你如何使用opengl-es在Android上检测长按?
GestureDetector是最好的解决方案。
这是一个有趣的选择。在 onTouchEvent 中,每隔ACTION_DOWN安排一个 Runnable 在 1 秒内运行。在每ACTION_UP或ACTION_MOVE,取消计划的 Runnable。如果取消发生在距离ACTION_DOWN事件不到 1 秒,则 Runnable 将不会运行。
final Handler handler = new Handler();
Runnable mLongPressed = new Runnable() {
public void run() {
Log.i("", "Long press!");
}
};
@Override
public boolean onTouchEvent(MotionEvent event, MapView mapView){
if(event.getAction() == MotionEvent.ACTION_DOWN)
handler.postDelayed(mLongPressed, ViewConfiguration.getLongPressTimeout());
if((event.getAction() == MotionEvent.ACTION_MOVE)||(event.getAction() == MotionEvent.ACTION_UP))
handler.removeCallbacks(mLongPressed);
return super.onTouchEvent(event, mapView);
}
试试这个:
final GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() {
public void onLongPress(MotionEvent e) {
Log.e("", "Longpress detected");
}
});
public boolean onTouchEvent(MotionEvent event) {
return gestureDetector.onTouchEvent(event);
};