学习内容
- View 基础
- 滑动
- 事件分发机制
- 滑动冲突
1. View 基础知识
View 定义
- View 是 Android 种所有控件的基类,是一种界面层的控件的一种抽象,代表了一个控件
- ViewGroup 继承 View,其内部包含了许多个控件,即一组 View
- ViewGroup 内部是可以有子 View 的,而这个子 View 同样还可以是 ViewGroup
View 位置参数
- Android 种,坐标系的 x 轴和 y 轴的正方向分别是右和下。
- View 的位置由其四个顶点决定,分别对应四个属性:top(左上角纵坐标)、left(左上角横坐标)、right(右下角横坐标)、bottom(右下角纵坐标),这些坐标相对于父容器来说的。
- Android 3.0 以后,加入 x、y、translationX、translationY,其中 x、y是 View 左上角的坐标,而 translationX、translationY 是 View 左上角相对于父容器的偏移量
MotionEvent 和 TouchSlop
- MotionEvent 是手指接触屏幕后所产生的一系列事件。
- 一般通过 MotionEvent 对象可以得到点击事件发生的 x 和 y 坐标
- getX / getY:相对坐标
- getRawX / getRawY:绝对坐标
- TouchSlop 指系统能识别出的被认为是滑动的最小距离,通过
ViewConfiguration.get(getContext()).getScaledTouchSlop()
方法来获取。
VelocityTracker、GestureDetector 和 Scroller
VelocityTracker
速度追踪,用于追踪手指在滑动过程中的速度
使用
VelocityTracker velocityTracker = VelociityTracker.obtain(); velocityTracker.addMovement(event); //获取速度之前按必须先计算速度,速度指一段时间内手指滑过的像素数 //速度 = (终点位置 - 起点位置)/ 时间段 velocityTracker.computeCurrentVelocity(1000); int xVelocity = (int)velocityTracker.getXVelocity(); int yVelocity = (int)velocityTracker.getYVelocity(); //不再需要使用的时候,重置并回收内存 velocityTracker.clear(); velocityTracker.recycler();
GestureDetector
手势检测,用于辅助检测用户的单击、滑动、长按、双击等行为。
使用
//创建 GestureDetector 对象并实现 指定接口如 OnGestureListener 、 OnDoubleTapListener GestureDetector mGestureDetector = new GestureDetector(this); mGestureDetector.setIsLongpressEnabled(flase); //接着接管目标 View 的 onTouchEvent 方法 boolean consume = mGestureDetector.onTouchEvent(event); return consume;
建议:如果只是监听滑动相关,建议自己在 onTouchEvent 中实现,如果要监听双击这种行为的话,那么就使用 GestureDetector
- <