ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
# GestureDetector GestureDetector类给我们提供了三个接口,一个外部类 OnGestureListener:接口,用来监听手势事件(6种)。 OnDoubleTapListener:接口,用来监听双击事件。 OnContextClickListener:接口,外接设备,比如外接鼠标产生的事件(本文中我们不考虑)。 SimpleOnGestureListener:外部类,SimpleOnGestureListener其实上面三个接口中所有函数的集成,它包含了这三个接口里所有必须要实现的函数而且都已经重写,但所有方法体都是空的。需要自己根据情况去重写。 > OnGestureListener接口方法解释: > ~~~ public interface OnGestureListener { /** * 按下。返回值表示事件是否处理 */ boolean onDown(MotionEvent e); /** * 短按(手指尚未松开也没有达到scroll条件) */ void onShowPress(MotionEvent e); /** * 轻触(手指松开) */ boolean onSingleTapUp(MotionEvent e); /** * 滑动(一次完整的事件可能会多次触发该函数)。返回值表示事件是否处理 */ boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY); /** * 长按(手指尚未松开也没有达到scroll条件) */ void onLongPress(MotionEvent e); /** * 滑屏(用户按下触摸屏、快速滑动后松开,返回值表示事件是否处理) */ boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY); } ~~~ > OnDoubleTapListener接口方法解释: > ~~~ public interface OnDoubleTapListener { /** * 单击事件(onSingleTapConfirmed,onDoubleTap是两个互斥的函数) */ boolean onSingleTapConfirmed(MotionEvent e); /** * 双击事件 */ boolean onDoubleTap(MotionEvent e); /** * 双击事件产生之后手指还没有抬起的时候的后续事件 */ boolean onDoubleTapEvent(MotionEvent e); } ~~~ > SimpleOnGestureListener实现了OnGestureListener、OnDoubleTapListener、OnContextClickListener。SimpleOnGestureListener里面的方法是是三个接口的集合。 > ### GestureDetector使用 GestureDetector的使用非常的简单,分为三个步骤: * 定义GestureDetector类, ~~~ private GestureDetector mGestureDetector; ~~~ * 将touch事件交给GestureDetector(onTouchEvent函数里面调用GestureDetector的onTouchEvent函数)。 ~~~ @Override public boolean onTouchEvent(MotionEvent event) { return mGestureDetector.onTouchEvent(event); } ~~~ * 处理SimpleOnGestureListener或者OnGestureListener、OnDoubleTapListener、OnContextClickListener三者之一的回调。 # ScaleGestureDetector ScaleGestureDetector是用于处理缩放的工具类 ScaleGestureDetector类给提供了OnScaleGestureListener接口,来告诉我们缩放的过程中的一些回调。 > OnScaleGestureListener回调函数介绍 > ~~~ public interface OnScaleGestureListener { /** * 缩放进行中,返回值表示是否下次缩放需要重置,如果返回ture,那么detector就会重置缩放事件,如果返回false,detector会在之前的缩放上继续进行计算 */ public boolean onScale(ScaleGestureDetector detector); /** * 缩放开始,返回值表示是否受理后续的缩放事件 */ public boolean onScaleBegin(ScaleGestureDetector detector); /** * 缩放结束 */ public void onScaleEnd(ScaleGestureDetector detector); } ~~~ > ScaleGestureDetector类常用函数介绍,因为在缩放的过程中,要通过ScaleGestureDetector来获取一些缩放信息。 > ~~~ /** * 缩放是否正处在进行中 */ public boolean isInProgress(); /** * 返回组成缩放手势(两个手指)中点x的位置 */ public float getFocusX(); /** * 返回组成缩放手势(两个手指)中点y的位置 */ public float getFocusY(); /** * 组成缩放手势的两个触点的跨度(两个触点间的距离) */ public float getCurrentSpan(); /** * 同上,x的距离 */ public float getCurrentSpanX(); /** * 同上,y的距离 */ public float getCurrentSpanY(); /** * 组成缩放手势的两个触点的前一次缩放的跨度(两个触点间的距离) */ public float getPreviousSpan(); /** * 同上,x的距离 */ public float getPreviousSpanX(); /** * 同上,y的距离 */ public float getPreviousSpanY(); /** * 获取本次缩放事件的缩放因子,缩放事件以onScale()返回值为基准,一旦该方法返回true,代表本次事件结束,重新开启下次缩放事件。 */ public float getScaleFactor(); /** * 返回上次缩放事件结束时到当前的时间间隔 */ public long getTimeDelta(); /** * 获取当前motion事件的时间 */ public long getEventTime(); ~~~ ### ScaleGestureDetector使用 * 定义ScaleGestureDetector类 ~~~ ~~~