移动事件后LongPress可以触发吗?

时间:2012-09-11 06:57:14

标签: java android android-screen android-gesture

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

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

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

那么在屏幕上移动后有没有办法触发LongPress?

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

感谢任何帮助。

谢谢。

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

我担心你必须自己做。默认实现是仅在没有Move事件时触发长按事件

关键是在System.getCurrentTime()

中使用onTouchEvent()

如何?

onTouch()

中的

  • 查找Motion_DOWN事件,

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

-

  • 关于Motion_UP事件
    • 将isClicked设置为false。
编辑:我错过了一个重要的步骤:

  • 关于Motion_MOVE事件
    • 重新启动计时器任务(即取消+开始)