view基础知识
1、view的位置参数
view的位置主要由四个参数决定,分别是top、left、right、bottom决定,其中(top,left)是左上角的坐标,(right,botttom)是右下角的坐标,这些坐标都是相对于view的父容器来说的,是一种相对坐标。
view的宽高
width = right - left;
height = bottom - top;
从view中获取这四个参数
left = getLeft();
right = getRight();
top = getTop;
bottom = getBottom();
android3.0以后,view增加了额外的参数:x、y、translationX、translationY,其中x和y是view左上角的坐标,translationX和translationY是View左上角相对于容器的偏移量,这几个坐标也是相对坐标。,换算关系如下:
x = left + translationX;
y = top + translationY;
所以,view在平移的过程中,top和left始终是最初时候左上角坐标,并一直保持不变。
2、屏幕移动相关
2.1、MotionEvent
常用的屏幕触摸监听的类,包含ACTION_DOWN、ACTION_MOVE、ACTION_MOVE三种事件监听方法。
可以通过getX/getY方法来获得当前点击事件的相对坐标,通过getRawX/getRawY方法获取当前点击事件的绝对坐标。
2.2、TouchSlop
这个类一般用于获取系统的最小滑动距离,可以通过这个距离来判断手指是否在屏幕上滑动,获取的方法如下:
ViewConfiguration.get(getContext()).etScaledTouchSlop();
2.3、VelocityTracker
用于速度追踪的类,可以追踪水平方向和竖直方向上的速度,一般分为如下两个步骤获取:
//计算当前速度
VelocityTracker velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(event);
//获取各个方向上的速度
velocityTracker.computeCurrentVelocity(1000);
int xVelocity = (int)velocityTracker.getXVelocity();
int yVelocity = (int)velocityTracker.getYVelocity();
//计算完成后回收内存
velocityTracker.clear();
velocityTracker.recycle();
2.4、GestureDetector
手势检测类,常用来辅助检查用户的单击、滑动、长按、双击等行为,最常用的是检测用户的双击行为。
2.5、Scroller
一般用于View的弹性滑动的实现。然而Scroller本身无法让view弹性滑动,需要和View的ComputeScroller配合使用才能共同完成这个功能。示例代码如下:
Scroller scroller = new Scroller(mContext);
//缓慢滑动到指定的位置
private void smothScrollTo(int destX,int destY){
int scrollX = getScrollX();
int delta = destX - scrollX;
mScroller.startScroll(scrollX,0,delta,0,1000);
invalidate();
}
@Override
public void computeScroll(){
if(mScroller.computeScrollOffset()){
scrollTo(mScroller.etCurrX(),mScroller.getCurrY());
postInvalidate();
}
}