View的事件体系(一)

2018-09-18  本文已影响0人  阿泽Leo

View的定义

View是android中所有控件的基类。包括ViewGroup。


View的参数

View坐标体系.jpg

可以得出:

width = right - left
height = bottom - top

View的四个参数获取方式为:

从android3.0开始添加了4个参数:x,y,tranlationX,translationY。其中x,y对应View左上角的坐标,tranlationX和tranlationY是View左上角相对于父容器的偏移量,默认为0。

x = left + tranlationX
y = top + tranlationY

View在平移时,top、left不会发生改变,改变的是x、y、tranlationX、和tranlationY。


MotionEvent

当手指接触屏幕后有这三种典型事件类型:

  • ACTION_DOWN 手指刚接触屏幕
  • ACTION_MOVE 手指在屏幕上移动
  • ACTION_UP 手指松开屏幕

一般有以下两种情况:

  • 点击,松开。事件为DOWN->UP
  • 点击,滑动,松开。事件为DOWN->MOVE->...->MOVE->UP

MotionEvent获取点击事件的坐标有两组方法:

  • getX()、getY()
    返回相对于当前View左上角的x、y坐标。
  • getRawX()、getRawY()
    返回相对于手机屏幕左上角的x、y坐标。

TouchSlop

TouchSlop是系统所能识别的滑动的最小距离
获取的方法:

ViewConfiguration.get(this).getScaledTouchSlop();

Velocity

Velocity用于追踪滑动的速度
使用方法:

//追踪事件
VelocityTracker velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(event);
//先计算速度,再获取
velocityTracker.computeCurrentVelocity(1000);
float xVelocity = velocityTracker.getXVelocity();
float yVelocity = velocityTracker.getYVelocity();
...
//使用完毕后释放
velocityTracker.clear();
velocityTracker.recycle();

需要注意,速度有正负。正着坐标系的方向滑动,速度为正。


GestureDetector

GestureDetector用于手势检测,例如用户的单击、滑动、长按、双击等。
使用方法:

GestureDetector mDetector = new GestureDetector(context,listener);
//解决长按后无法拖动的现象
mDetector.setIsLongpressEnabled(false);

@Override
public boolean onTouchEvent(MotionEvent event) {
    //接管event
    boolean consume = mDetector.onTouchEvent(event);
    return consume;
}
上一篇 下一篇

猜你喜欢

热点阅读