在 Android 中检测长按

新手上路,请多包涵

我目前正在使用 onTouchEvent(MotionEvent event) { } 来检测用户何时按下我的 glSurfaceView 是否有一种方法可以检测何时进行长按。

我猜想如果我在开发文档中找不到太多内容,那将是某种变通方法。类似于注册 ACTION_DOWN 并查看它在 ACTION_UP 之前的时间。

你如何使用 opengl-es 检测 Android 上的长按?

原文由 Jack 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 557
2 个回答

尝试这个:

 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);
};

原文由 Daniel Fekete 发布,翻译遵循 CC BY-SA 3.0 许可协议

GestureDetector 是最好的解决方案。

这是一个有趣的选择。在 onTouchEvent 中,每个 ACTION_DOWN 安排一个 Runnable 在 1 秒内运行。在每个 ACTION_UPACTION_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);
}

原文由 MSquare 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏