如何检测 MotionEvent.ACTION_MOVE 何时完成

8
我需要在我的应用程序中检测用户何时停止移动特定视图。我正在创建类似于跑马灯文本的东西,它可以在用户触摸视图并在其上移动时进行交互。在用户抬起手指后,我需要开始滚动视图。我发现如果我在视图上移动手指几秒钟,然后抬起手指,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;
    }
});

提前致谢!


展示你的代码,这样我们可以帮助你。 - rajpara
我在多点触控方面也遇到了同样的问题,当第一个手指抬起时,会发送MotionEvent.ACTION_MOVE,然后是MotionEvent.ACTION_POINTER_UP。这很愚蠢... - Roman Truba
1个回答

2

我认为该事件在手势结束之前可能会发送一个 ACTION_CANCEL 操作。或者,如果它拖出了您正在检查的视图,则可能是 ACTION_OUTSIDE

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接