2

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

“在屏幕上发生一些移动事件(MotionEvent.ACTION_MOVE 为真)之后,如果用户在没有从屏幕上取下手指的地方停止移动几秒钟,则需要执行一些操作。”

*我了解到 LongPress 是在触发向下事件后用户不进行任何移动时触发的东西(MotionEvent.ACTION_DOWN)。*

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

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

任何帮助表示赞赏。

谢谢你。

4

2 回答 2

5

想法是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);
}
于 2012-09-11T09:30:52.070 回答
1

恐怕你必须自己做。默认实现是只有在没有 Move 事件时才触发长按事件

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

如何?

onTouch()

  • 寻找 Motion_DOWN 事件,

    • 注意(在long变量中设置)触摸事件的时间。(使用System.getCurrentTime()
    • 设置一个布尔值(说isClicked真)
    • 启动一个计时器任务,在 x 毫秒后执行(其中 x 是您的 longClick 的持续时间),如果isClicked仍然为真。将其视为您的 onLongClick 侦听器

--

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

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

  • 在 Motion_MOVE 事件上
    • 重启定时器任务(即取消+启动)
于 2012-09-11T08:10:16.870 回答