【问题标题】:how to detect when MotionEvent.ACTION_MOVE is finished如何检测 MotionEvent.ACTION_MOVE 何时完成
【发布时间】:2012-06-30 18:10:41
【问题描述】:

当用户停止在特定视图中移动时,我需要在我的应用程序中进行检测。我正在我的应用程序中创建类似于标记文本的内容,当用户触摸视图并在其上移动时可以进行交互。我需要在用户抬起手指后开始滚动视图。正如我注意到的那样,如果我在视图上移动手指几秒钟,当我抬起手指时,MotionEvent.ACTION_UP 不会被调用。我捕获的最后一个事件是 ACTION_MOVE 。那么如何检测用户在视图中移动几秒钟后抬起手指的时间呢?是否有某种功能可以检测到这一点?

这是我正在使用的代码:

txt.setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, final MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                Log.e("","event down : "+event.getAction());
                handler.removeCallbacks(runnable);
                break;
            case MotionEvent.ACTION_UP:
                Log.e("","event up : "+event.getAction());
                if(myTimer!=null){
                    myTimer.cancel();
                }
                break;
            case MotionEvent.ACTION_MOVE:
                Log.d("","move");
                // handler.removeCallbacks(runnable);
                checkX();
                break;
        }
        return true;
    }
});

提前致谢!

【问题讨论】:

  • 显示您的代码。所以我们可以提供帮助
  • 我有同样的多点触控问题,在第一个手指向上 MotionEvent.ACTION_MOVE 被发送后,然后 MotionEvent.ACTION_POINTER_UP。这是愚蠢的事情......
  • 您找到解决方案了吗?

标签: java android motion-detection


【解决方案1】:

我认为该事件可能会在手势完成之前发送ACTION_CANCEL 动作。或者,如果它拖到您正在检查的视图之外,它可能是ACTION_OUTSIDE

确认/调试此问题的最佳方法是放入 Log.d() 语句,打印 MotionEvent.getActionMasked() 值,并检查在您的 ACTION_MOVE 事件结束后调用了哪些操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 2010-11-02
    • 2018-11-22
    • 1970-01-01
    相关资源
    最近更新 更多