移动事件后可以长按触发器



我正在开发一个简单的android应用程序,我的要求是

"在屏幕上发生一些移动事件(MotionEvent.ACTION_move为true)后,如果用户停止移动几秒钟,而手指从屏幕上移开,则需要执行一些操作。"

*我了解到,当用户在触发向下事件(MotionEvent.ACTION_down)后没有移动时,LongPress会触发。*

那么,在屏幕上移动后,有什么方法可以触发LongPress吗?

还是应该为相同的功能创建自己的侦听器??

感谢您的帮助。

谢谢。

想法是每次在屏幕上移动手指时cancel计时器(MotionEvent.ACTION_MOVE)。当你在一段时间后停止移动时,比如3秒后,计时器代码将被执行,你可以在其中执行长按任务。如果你停止移动一段时间,然后在过去的时间(3秒)之前再次开始移动,再次设置新的计时器等等。希望这对你有帮助。

timer = new Timer();
public boolean onTouchEvent(MotionEvent event) 
{
    switch(event.getAction()) 
    {
        case MotionEvent.ACTION_DOWN:
             break;
        case MotionEvent.ACTION_MOVE:
             timer.cancel();
             timer = null;
             timer = new Timer();
             timer.schedule(new TimerTask() 
             {                  
                @Override
                public void run() {
                    // do your long press task here
                }
             }, 3000);
             break;
        case MotionEvent.ACTION_UP:
             timer.cancel();
             timer = null;
             break;
    }
    return super.onTouchEvent(event);
}

恐怕你得自己做了。默认实现是只有在没有移动事件的情况下才触发长按事件

关键是在onTouchEvent() 中使用System.getCurrentTime()

如何?

onTouch()

  • 查找Motion_DOWN事件,

    • 注意(在long变量中设置)触摸事件的时间。(使用System.getCurrentTime()
    • 设置布尔值(例如isClicked为true)
    • 启动一个计时器任务,如果isClicked仍然为true,则在x毫秒后执行(其中x是longClick的持续时间)。把它想象成你的onLongClick监听器

--

  • 在Motion_UP事件上
    • 将isClicked设置为false

编辑:我错过了一个重要的步骤:

  • 在Motion_MOVE事件上
    • 重新启动计时器任务(即取消+启动)

相关内容

  • 没有找到相关文章

最新更新