View是所有控件的基类,是一种界面层的控件的一种抽象。
1.1 View的位置参数 一共8个
View主要由四个顶点决定,分别对应View的四个属性:top、left、right、bottom
top是左上角纵坐标,left是左上角横坐标,right是右下角横坐标,bottom是右下角纵坐标
(注意这里面的参数是相对于View的父容器来说的)
获取这些参数的方法:
Left=getLeft() Right=getRight() Top=getTop() Bottom=getBottom()
在android3.0以后,View额外增加了几个参数 x , y , translationX 和translationY 也是相对于父容器的偏移量
其中x,y是指View左上角的坐标,translationX和translationY是View的左上角相对于父容器的偏移量(默认值为0)
特殊的情况:View在平移的过程中,top和left表示的是原始的左上角位置信息,值不会发生变化但是x,y,translationX,translationY的值会发生变化
x=left+translationX
y=top+translationY
1.2 View的事件触发
MotionEvent 典型的事件类型有以下几种
~ ACTION_DOWN 手指刚接触屏幕
~ ACTION_MOVE 手指在屏幕上移动
~ ACTION_UP 手指从屏幕上松开的一瞬间
下面的几种正常的操作
~ 点击屏幕后离开松开,事件的序列为 Down->Up
~ 点击屏幕滑动一会儿,事件序列为 Down->MOVE->...->Up
TouchSlop系统所能识别的滑动最小距离 通过下面获取 ViewConfiguration.get(getContext()).getScaledTouchSlop()
1.3 VelocityTracker , GestureDetector , Scroller
<1> 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();
<2> GestureDetector 手势检测,用于检测用户的 单击,双击,滑动,长按
使用方法:~ 首先创建GestureDetector对象并实现 OnGestureListener接口 还可以实现 OnDoubleTapListener (用于监听双击行为) GestureDetector mGestureDetector = new GestureDetector(this);
//解决长按屏幕后无法拖动的现象 mGestureDetector.setIsLongpressEnabled(false);
~ 接着,在接管View 的onTouchEvent方法中,在待监听View 的onTouchEvent方法中如下实现
boolean consume=mGestureDetector.onTouchEvent(event);
return consume ;
~ 就可以有选择地实现 OnGestureListener 和 OnDoubleTapListener的方法了,让该View实现这两个接口
~使用 GestureDetector 和MotionEvent 的区别 : 可以不使用 GestureDetector ,但是推荐实现监听双击这种行为时候,使用 GestureDetector
<3> Scroller 弹性滑动对象,用于实现View的弹性滑动
View可以通过调用 scrollTo/scrollBy方法进行滑动,但是过程是瞬间完成的,但是Scroller可以实现过渡效果的滑动