andorid使用手势监听器时出现GestureDetector不响应怎么解决

  介绍

andorid使用手势监听器时出现GestureDetector不响应怎么解决?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

<强>方法如下:

在活动的oncreate()中初始化手势监听器

mGestureDetector=new GestureDetector (getApplicationContext(),新的MyGestureListener (getApplicationContext ())),

然后写一个类继承手势监听器,当然你也可以采用匿名的方法:

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *手势监听器* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */类MyGestureListener GestureDetector延伸。SimpleOnGestureListener {   上下文mContext;   MyGestureListener(上下文语境){   mContext=上下文;   }   @Override   公共布尔>/* *   *重写触摸事件   * @param事件   * @return   */@Override   公共布尔alt=" andorid使用手势监听器时出现GestureDetector不响应怎么解决">

(中间若干个都是ondraw:移动)

 andorid使用手势监听器时出现GestureDetector不响应怎么解决

首先可以看到双击(onDoubleTapEvent)被回调之后的移动事件都被传递到了onDoubleTapEvent中。但是当你第二次点击时间达到一定之后,onLongPress会被回调,而当onLongPress被回调之后,移动动作就被GestureDetector无视了,直上到动作出现,显然这不是我们想要的。

那么我们可以在onDoubleTapEvent中接收到下动作时,利用setIsLongPressEnabled()使LongPress不会触发,然后在onDoubleTapEvent中接收到起来动作时再恢复即可。

 @Override
  公共布尔alt=" andorid使用手势监听器时出现GestureDetector不响应怎么解决"> 

(中间若干个ondraw:移动,onDoubleTapEvent)

 andorid使用手势监听器时出现GestureDetector不响应怎么解决

<强>长按拖动:

在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不响应怎么解决