后移动事件可以长按触发?(Can LongPress trigger after move even

2019-09-22 06:57发布

我工作的一个简单的Android应用程序,我的要求是,

“一些移动事件后(MotionEvent.ACTION_MOVE为true)在屏幕上,如果用户停止移动几秒钟一些地方用了从屏幕上走的手指,则需要执行一些动作。”

*我了解到,长按是什么触发,当用户没有做出任何举动向下事件被触发(MotionEvent.ACTION_DOWN)之后。*

那么,有没有办法在屏幕上四处移动后触发长按?

或者我应该创建自己的监听器相同的功能?

任何帮助表示赞赏。

谢谢。

Answer 1:

想法是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);
}


Answer 2:

恐怕你必须做你自己。 默认的实现只是如果没有移动事件来触发长按事件

关键是要使用System.getCurrentTime()onTouchEvent()

怎么样?

onTouch()

  • 寻找Motion_DOWN事件,

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

-

  • 在Motion_UP事件
    • 集isClicked为假。

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

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


文章来源: Can LongPress trigger after move events?