《Android 开发艺术探索》笔记——(3)View 的事件体系

View 基础知识

View 是 Android 中所有控件的基类,ViewGroup 也继承了 View。
Android 中,x 轴和 y 轴的正方向分别为右和下。

位置参数:

(left , top   ): View 左上角原始坐标
(right, bottom): View 右下角原始坐标
(x    , y     ): View 左上角最终坐标
translationX: View 左上角横向偏移量
translationY: View 左上角纵向偏移量

x = left + translationX
y = top  + translationY (setX/Y() 时其实就是改变 translationX/Y 的值)
width  = right  - left
height = bottom - top

MotionEvent 和 TouchSlop

MotionEvent

典型事件:ACTION_DOWN, ACTION_MOVE,ACTION_UP
意思也很容易理解,分别是落,动,起

一次触摸会触发一系列事件:

  • 点击屏幕后离开松开:DOWN -> UP
  • 点击屏幕滑动再松开:DOWN -> MOVE ->…-> MOVE -> UP

通过 MotionEvent 获得点击事件的坐标:

  • getX / getY : 相对于当前 View 左上角的 x 和 y 坐标
  • getRawX / getRawY:相对于手机屏幕左上角的 x 和 y 坐标

TouchSlop

滑动的最小距离,若没达到,则不认为是滑动,默认 8dp。

VelocityTracker、GestureDetector 和 Scroller

VelocityTracker

速度追踪,用于追踪手指在滑动过程中的速度。

在 View 的 onTouchEvent 方法中:

VelocityTracker velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(event);
velocityTracker.computeCurrentVelocity(1000);// 1000ms内划过的像素数
int xVelocity = (int) velocityTracker.getXVelocity();
int yVelocity = (int) velocityTracker.getYVelocity();

回收:

velocityTracker.clear();
velocityTracker.recycle();

GestureDetector

手势检测,用于辅助检测用户的单击、滑动、长按、双击等行为。
一般监听滑动相关,在 onTouchEvent 中自己实现,若是监听双击,则使用 GestureDetector。

Scroller

弹性滑动对象,用于实现 View 的弹性滑动,即有过过渡效果的滑动,与 View 的 computeScroll 方法配合使用。

你可能感兴趣的:(android,view,笔记)