andorid使用手势监听器时出现GestureDetector不响应怎么解决?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
<强>方法如下:强>
在活动的oncreate()中初始化手势监听器
mGestureDetector=new GestureDetector (getApplicationContext(),新的MyGestureListener (getApplicationContext ())),
引用>然后写一个类继承手势监听器,当然你也可以采用匿名的方法:
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *手势监听器* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */类MyGestureListener GestureDetector延伸。SimpleOnGestureListener { 上下文mContext; MyGestureListener(上下文语境){ mContext=上下文; } @Override 公共布尔>/* * *重写触摸事件 * @param事件 * @return */@Override 公共布尔alt=" andorid使用手势监听器时出现GestureDetector不响应怎么解决">(中间若干个都是ondraw:移动)
首先可以看到双击(onDoubleTapEvent)被回调之后的移动事件都被传递到了onDoubleTapEvent中。但是当你第二次点击时间达到一定之后,onLongPress会被回调,而当onLongPress被回调之后,移动动作就被GestureDetector无视了,直上到动作出现,显然这不是我们想要的。
那么我们可以在onDoubleTapEvent中接收到下动作时,利用setIsLongPressEnabled()使LongPress不会触发,然后在onDoubleTapEvent中接收到起来动作时再恢复即可。
@Override 公共布尔alt=" andorid使用手势监听器时出现GestureDetector不响应怎么解决">(中间若干个ondraw:移动,onDoubleTapEvent)
引用>
<强>长按拖动:强>
在onLongPress被回调之后,GestureDetector不会对移动动作调用任何函数,除非直到一个了动作出现,但用户的习惯不可能是这样,因此对于这个需求我们需要在ondraw中对移动动作进行识别。
首先修改onLongPress函数,在长按之后更新状态为可拖拽,然后对ondraw中移动的动作我们自己调用onScroll(不一定要onScroll),并且在onScroll中完成动作,因此需要记录上一次的MotionEvent:
@Override 公共空间> @Override 公共布尔alt=" andorid使用手势监听器时出现GestureDetector不响应怎么解决”>从点一个滑动到B点,并且在B点松手的话,在没有触发onFling的情况下,会回调onScroll (eA, eB, distanceX distanceY),然后GestureDetector不消费点B的事件,此时我们在ondraw中处理这了个事件。代码也很简单,在长按拖动的基础上增加一个其他即可:
案例MotionEvent.ACTION_UP: 如果拖(){>看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。andorid使用手势监听器时出现GestureDetector不响应怎么解决