View 是 Android 中所有控件的基类,如:
Object——View——TextView——Button
Object——View——ViewGroup——RelativeLayout
1. View 的位置参数
View 的位置主要由 4 个顶点来决定,在 View 中用 mLeft, mRight, mTop, mBottom 这四个属性来表示。获取方式如下:
getLeft(), getRight(), getTop(), getBottom()。
从 Android 3.0 以来,增加了 x, y, translationX, translationY 参数,表示左上角的坐标,
x = mLeft + translationX;
y = mTop + translationY;
当 View 的位置发生变化,mLeft 等这些参数不会发生改变,x, y, translationX, translationY 会发生改变。
2. MotionEvent
MotionEvent 有三个事件类型:
ACTION_DOWN, ACTION_MOVE, ACTION_UP。
通过 MotionEvent 可以获取点击事件发生的坐标,getX()/getY() 获取的是相对于当前 View 的坐标,想要获取相对于屏幕的坐标需用 getRawX()/getRawY()。
3. 其它可能用到的 (VelocityTracker, GestureDetector, Scroller)
- VelocityTracker
速度追踪,使用方法:
首先创建对象,把 MotionEvent 添加进来:
VelocityTracker velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(event);
然后计算速度,注意需要先调用 computeCurrenVelocity() 方法,1000 指的是 1000ms。
velocityTracker.computeCurrentVelocity(1000);
velocityTracker.getXVelocity();
velocityTracker.getYVelocity();
最后不用了需要清除设置并回收:
velocityTracker.clear();
velocityTracker.recycle();
- GestureDetector
手势检测,一般用于辅助检测单击,双击,长按,滑动手势。使用方法:
首先创建对象,实现 OnGestureListener 接口
GestureDetector gestureDetector = new GestureDetector(this);
然后onTouchEvent 返回 gestureDetector.onTouchEvent(event),就可以捕捉到OnGestureListener 中的方法了。
单击,双击事件在 OnDoubleTapListener 中,使用方法:
GestureDetector.OnDoubleTapListener listener = new GestureDetector.OnDoubleTapListener() {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
Log.e(TAG, "onSingleTapConfirmed");
return true;
}
@Override
public boolean onDoubleTap(MotionEvent e) {
Log.e(TAG, "onDoubleTap");
return true;
}
@Override
public boolean onDoubleTapEvent(MotionEvent e) {
Log.e(TAG, "onDoubleTapEvent");
return true;
}
};
listener.onDoubleTap(event);
- Scroller
弹性滑动对象,用于实现 View 的弹性滑动。