View的定义
View是android中所有控件的基类。包括ViewGroup。
View的参数
可以得出:
width = right - left
height = bottom - top
View的四个参数获取方式为:
- Left = getLeft();
- Right = getRight();
- Top = getTop();
- Bottom = getBottom();
- Width = getWidth();
- Height = getHeight();
从android3.0开始添加了4个参数:x,y,tranlationX,translationY。其中x,y对应View左上角的坐标,tranlationX和tranlationY是View左上角相对于父容器的偏移量,默认为0。
x = left + tranlationX
y = top + tranlationY
View在平移时,top、left不会发生改变,改变的是x、y、tranlationX、和tranlationY。
MotionEvent
当手指接触屏幕后有这三种典型事件类型:
- ACTION_DOWN 手指刚接触屏幕
- ACTION_MOVE 手指在屏幕上移动
- ACTION_UP 手指松开屏幕
一般有以下两种情况:
- 点击,松开。事件为DOWN->UP
- 点击,滑动,松开。事件为DOWN->MOVE->...->MOVE->UP
MotionEvent获取点击事件的坐标有两组方法:
- getX()、getY()
返回相对于当前View左上角的x、y坐标。- getRawX()、getRawY()
返回相对于手机屏幕左上角的x、y坐标。
TouchSlop
TouchSlop是系统所能识别的滑动的最小距离。
获取的方法:
ViewConfiguration.get(this).getScaledTouchSlop();
Velocity
Velocity用于追踪滑动的速度。
使用方法:
- 在View的onTouchEvent中追踪MotionEvent事件。
- 计算速度,获取速度。
- 释放资源。
//追踪事件
VelocityTracker velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(event);
//先计算速度,再获取
velocityTracker.computeCurrentVelocity(1000);
float xVelocity = velocityTracker.getXVelocity();
float yVelocity = velocityTracker.getYVelocity();
...
//使用完毕后释放
velocityTracker.clear();
velocityTracker.recycle();
需要注意,速度有正负。正着坐标系的方向滑动,速度为正。
GestureDetector
GestureDetector用于手势检测,例如用户的单击、滑动、长按、双击等。
使用方法:
- 创建对象并实现OnGestureListener
- 在View的onTouchEvent中接管event
- 按需实现监听器里面的方法,OnGestureListener和OnDoubleTapListener。
GestureDetector mDetector = new GestureDetector(context,listener);
//解决长按后无法拖动的现象
mDetector.setIsLongpressEnabled(false);
@Override
public boolean onTouchEvent(MotionEvent event) {
//接管event
boolean consume = mDetector.onTouchEvent(event);
return consume;
}