View是Android中所有控件的基类。
View的位置主要由它的四个顶点来决定,分别对应四个属性top,left,right,bottom。这些坐标都是相对于View的父容器来说的。
在Android中,x轴和y轴的正方向是右和下。
View宽高的关系:width=right-leftheight=bottom-top
从android3.0开始,新加入了x,y,translationX,translationY四个参数,分别为左上角的坐标和View左上角相对于父容器的偏移量。
MotionEvent
典型事件类型:ACTION_DOWN手指刚接触屏幕 ACTION_UP手指离开屏幕一瞬间
ACTION_MOVE手指在屏幕上移动
getX/getY返回的是相对于当前View左上角的x和y坐标
getRawX/getRawY返回的是相对于手机屏幕左上角的x和y坐标
TouchSlop
它是系统所能识别出的被认为是滑动的最小距离
获取方法:
ViewConfiguration.get(getContext()).getScaledTouchSlop()
VelocityTracker
用于追踪手指在滑动过程中的速度这个速度是指一段时间内手指所划过的像素数,速度可以是负数。
首先在View的onTouchEvent中追踪单击事件的速度
VelocityTracker velocityTracker= VelocityTracker.obtain();
velocityTracker.addMovement(event);
获取滑动速度的方法
velocityTracker.computeCurrentVelocity(1000);
int xVelocity =(int) velocityTracker.getXVelocity();
int yVelocity =(int) velocityTracker.getYVelocity();
不需要使用时
velocityTracker.clear();
velocityTracker.recycle();
GestureDetector
手势检测,用于辅助检测用户的单击、滑动、长按、双击等行为。
Scroller
弹性滑动对象,用于实现View对象的弹性滑动
Scroller scroller;
private void soomthScrollTo(int destX,int destY){
int scrollX=getScrollX();
int scrollY=getScrollY();
int deltaX=destX-scrollX;
int deltaY=destY-scrollY;
scroller.startScroll(scrollX,scrollY,deltaX,deltaY,1000);
invalidate();
}
public void computeScroll(){
if(scroller.computeScrollOffset()){
scrollTo(scroller.getCurrX(),scroller.getCurrY());
postInvalidate();
}
}