1.1、View基础
View是一种界面层的控件的一种抽象,它代表一个控件。ViewGroup为控件组,它的内部包含多个控件(View)。Android中ViewGroup继承View 。
1.2、View的位置参数
View的位置由他的四个顶点决定对应四个属性:top,left,right,bottom。这些坐标是相对于View的父容器来说的,它是一种相对坐标。
View的位置坐标和父容器的关系Left = getLeft() ;
Right = getRight() ;
Top = getTop() ;
Bottom = getBottom() ;
这是四个参数的计算公式。
Android3.0,View增加了额外的几个参数:x、y、translationX和translationY 。其中x和y是View左上角的坐标,而translationX和translationY是View左上角相对于父容器的偏移量。
translationX和translationY默认值为0 。
x = left + translationX ;
y = top + translationY ;
View在平移的过程中,top和left表示的是原始左上角的位置信息,其值不会发生改变;发生改变的是x、y、translationX和translationY。
1.3、MotionEvent 和 TouchSlop
1)MotionEvent 通过MotionEvent可以得到点击事件发生的X和Y坐标。getX和getY返回的是相对于当前View左上角的X和Y坐标,而getRawX和getRawY返回的是相对于手机屏幕左上角的X和Y坐标。
2)TouchSlop 它是系统所能识别出的被认为是滑动得最小距离。ViewConfiguration.get(getContext()).getScaledTouchSlop()。当两次滑动事件的滑动距离小于这个值时,我们认为他们不是滑动。
1.4、VelocityTracker 、GestureDetector 和 Scroller
1) VelocityTracker速度追踪。用于追踪手指在滑动过程中的速度包括水平和竖直方向的速度。
使用方法:
步骤一:在View的onTouchEvent方法中追踪当前点击事件的速度。
VelocityTracker velocityTracker =VelocityTracker.obtain();
velocityTracker.addMovement(event);
步骤二:获取速度之前必须先计算速度
velocityTracker.computeCurrentVelocity(1000); //1000ms
步骤三:获取速度
int xVelocity = (int)velocityTracker.getXVelocity();// 1000ms水平滑动过的像素值即为水平速度
int yVelocity = (int)velocityTracker.getYVelocity();//同理
速度有正有负:速度=(终点位置 - 起点位置) / 时间段
步骤四:不需要时回收资源
velocityTracker.clear();
velocityTracker.recycle();
2)手势解析类----GestureDetector
用于辅助检测用户的单击、滑动和长按、双击等行为。
使用:
步骤一:创建一个GestureDetector对象并实现OnGestureListener接口,还可以实现OnDoubleTapListener从而能监听双击行为:
GestureDetector detector = new GestureDetector(this);
//解决长按屏幕后无法拖动的现象
detector .setIsLongPressEnabled(false);
步骤二:在View的onTouchEvent方法中接管目标View的onTouchEvent方法
boolean consume = detector.onTouchEvent(event);
return consume ;
步骤三:在相应的方法里处理事件。
网友评论