我正在开发一个简单的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事件上
- 重新启动计时器任务(即取消+启动)