美文网首页
View的事件体系(一)

View的事件体系(一)

作者: 阿泽Leo | 来源:发表于2018-09-18 16:40 被阅读0次

View的定义

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


View的参数

View坐标体系.jpg

可以得出:

width = right - left
height = bottom - top

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

  • Left = getLeft();
  • Right = getRight();
  • Top = getTop();
  • Bottom = getBottom();
  • Width = getWidth();
  • Height = getHeight();

从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用于追踪滑动的速度
使用方法:

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

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


GestureDetector

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

  • 创建对象并实现OnGestureListener
  • 在View的onTouchEvent中接管event
  • 按需实现监听器里面的方法,OnGestureListener和OnDoubleTapListener。
GestureDetector mDetector = new GestureDetector(context,listener);
//解决长按后无法拖动的现象
mDetector.setIsLongpressEnabled(false);

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

相关文章

网友评论

      本文标题:View的事件体系(一)

      本文链接:https://www.haomeiwen.com/subject/tztunftx.html