事件分发
作者:互联网
1.View位置参数
left=getLeft() //view左侧距离父布局左上角的的相对坐标
right=getRight(); //view右侧距离父布局左上角的的相对坐标
top=getTop(); //view顶侧距离父布局左上角的的相对坐标
bottom=getBottom(); //view底侧距离父布局左上角的的相对坐标
x,y是view左上角坐标
translationX,translationY 是view左上角相对于父容器偏移量(默认为0)
***view在平移时,top和left是原始左上角位置信息,其值不会发生改变,发生改变的是x,y,translationX,translationY
2.MotionEvent和TouchSlop
MotionEvent:ACTION_DOWN ACTION_MOVE ANTION_UP
TouchSlop被认为是滑动最小距离,距离太短时,系统不会判定为滑动。
3.VelocityTracker、GestureDetector、Scroller
3.1 VelocityTracker:速度追踪,在View的onTouchEvent方法中追踪当前单击事件的速度。
VelocityTracker velocityTracker = Velocity.obtain();
velocityTracker .addMovement(event);
velocityTracker .computeCurrentVelocity(1000);//计算速度 n像素/1000ms
int xVelocity=(int) velocityTracker .getXVelocity();
int yVelocity=(int) velocityTracker .getYVelocity();
//回收
velocityTracker .clear();
velocityTracker .recycle();
3.2 GestureDetector: 手势检测,辅助检测用户的单击、滑动、长按、双击
//创建GestureDetector对象
GestureDetector gestureDetectornew = GestureDetector(Context context, GestureDetector.OnGestureListener listener);
//接管View的onTouchEvent方法,在View的onTouchEvent里面添加
boolean res = gestureDetector.onTouchEvent(event);
return res;
GestureDetector可以实现GestureDetector.OnGestureListener 的方法
GestureDetector.OnGestureListener 方法介绍
onDown:由一个ACTION_DOWN触发。
onShowPress:长按或者滑动时才能触发,由一个ACTION_DOWN触发。
onSingleTapUp:单击行为,由ACTION_UP触发
onScroll:滚动,由一个ACTION_DOWN和多个ACTION_MOVE触发
onLongPress:长按,触发长按时不会触发onSingleTapUp:onScroll:onFling:(可以设置gestureDetector.setIsLongpressEnabled(false );)
onFling:快速滑动,由一个ACTION_DOWN和多个ACTION_MOVE和一个ACTION_UP触发
GestureDetector可以实现GestureDetector.OnDoubleTapListener 的方法
public void setOnDoubleTapListener(GestureDetector.OnDoubleTapListener onDoubleTapListener) ;
GestureDetector.OnDoubleTapListener 方法介绍
onDoubleTap:双击,与onSingleTapConfirmed不能共存
onSingleTapConfirmed:单击
onDoubleTapEvent:表示发生了双击行为,双击期间ACTION_DOWN ACTION_MOVE ACTION_UP都会触发此回调(一次双击会触发两次)
实际开发中,可以不适用GestureDetector,如果要监听双击,就要使用GestureDetector。
标签:分发,GestureDetector,触发,velocityTracker,事件,ACTION,左上角,view 来源: https://blog.csdn.net/qq_42654067/article/details/100861743