android中利用View中的onTouchEvent捕捉长按事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android中利用View中的onTouchEvent捕捉长按事件相关的知识,希望对你有一定的参考价值。

参考技术A 在自定义定view中想要实现的效果是:当手机按住屏幕时,如果在指定的时间内没有移动(如1秒),那么进入长按模式,此时手指在屏幕上移动都算作长按模式。如果手机按住屏幕就立马移动,那么就算作移动模式。

MotionEvent提供了当前的操作类型,按下(ACTION_DOWN)、 移动 (ACTION_MOVE)、弹起 (ACTION_UP)。MotionEvent 类同时提供了记录当前坐标的函数(getX(),getY())。event.getDownTime()用来记录event发生时的时间,event.getEventTime()用来记录最近一个ACTION_MOVE发生时的时间。

大概思路如下:在按下时记录x,y坐标以及按下时间,当第一次移动的时候获取移动的时间,如果大于指定的长按时间,那么进入长按模式,否则就是普通的移动模式。很容易在模拟器里面实现了这个效果,但是当在真机里面运行时,却无法实现这样的效果。原来模拟器点击的时候能够保证在不移动鼠标的情况下不触发ACTION_MOVE,但是真机却很敏感,几乎在ACTION_DOWN后的几毫秒之后就立马不停的ACTION_MOVE了。想了一下,其实只要稍微变通下变可以在真机上也实现相同的效果了。那就是判断ACTION_MOVE后的坐标和ACTION_DOWN的坐标的偏移值是否小于我们指定的偏移像素,如果在指定值内,那么认为没有移动。

以上是关于android中利用View中的onTouchEvent捕捉长按事件的主要内容,如果未能解决你的问题,请参考以下文章

Android的事件分发(dispatchTouchEvent),拦截(onInterceptTouchEvent)与处理(onTouchEvent)

Android onTouch()和onTouchEvent()区别

看看Android源码中View是如何实现LongPress的

看看Android源码中View是如何实现LongPress的

android想要利用多点触控放大或者缩小一个view该怎么实现

Android/Java面试题整理