读书笔记--MotionEvent

之前总结过一篇关于view的文章,本文更多的是总结了一些常用MotionEvent的相关知识。

MotionEvent的产生

简单翻译就是移动事件,触摸事件等等。就是当用户的手指在屏幕上操作的时候产生了一个MotionEvent对象。这个对象里包含了触摸的位置及时间等信息。

获取MotionEvent对象

  1. 在Activity中重载 onTouchEvent 方法
  2. 调用某个View的.setOnTouchListener并实现onTouch方法。(这里的View
    首字母大写了,是泛指所有继承View类的控件)

MotionEvent方法

@Override
public boolean onTouchEvent(MotionEvent event) {    
     return super.onTouchEvent(event);
}

这个函数的返回值是一个boolean型的。关于返回值的问题,之后我们会在另外的文章中讨论。但是它的基本原则就是:如果return true,那么表示该方法消费了此次事件,如果return false,那么表示该方法并未处理完全,该事件仍然需要以某种方式传递下去继续等待处理。关于这个方法的描述:Return true if you have consumed the event, false if you haven't. The default implementation always returns false.

event.getXXX();

  1. getAction()方法返回的是int类型,用到的只有低16位,其中:低八位是动作的类型,高8位是触摸点索引值的表示(单点为0,双点为1)
获得动作类型的俩种方法
int action = event.getAction() & MotionEvent.ACTION_MASK; 
int action2 = event.getActionMasked();
获得触摸点索引类型的俩种方法
int pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_INDEX_MASK) >> MotionEvent.ACTION_POINTER_INDEX_SHIFT;
int pointerIndex2 = event.getActionIndex();
  1. 事件发生的位置
event.getX();Returns the X coordinate of this event for the given pointer。
event.getY();
event.getRawX();Returns the original raw X coordinate of this event。
event.getRawY();
这俩组方法的区别就在于:
getX() 返回的是相对于当前view左上角的X坐标;
而getRawX返回的是相对于手机屏幕上左上角的X坐标。
  1. 事件发生的时间
event.getDownTime();  按下时的时间
event.getEventTime();  事件发生的当前时间
  1. 事件的类型
switch(action) { 
  case MotionEvent.ACTION_DOWN: break; 
  case MotionEvent.ACTION_MOVE: break; 
  case MotionEvent.ACTION_UP: break; 
}
这是三种事件最常用的类型,当然还有一些其他的类型。
  1. 关于
    MotionEvent提供的方法中,和事件类型中,会有Pointer的概念,比如getPointerId()和ACTION_POINTER_DOWN。pointer是什么呢?其实一个pointer就是一个触摸点。如果还是不能理解,就直接可以理解为一个pointer就是一个手指。大家都知道android的触摸可以分为单点触摸和多点触摸,而pointer就是区分这俩种情况的。

关于这部分内容大家可以看这里的一篇帖子。

VelocityTracker 滑动速度?

// 第一步 在View的 onTouchEvent方法中追踪当前单击事件的速度
VelocityTracker velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(event);
// 第二步 计算速度
velocityTracker.computeCurrentVelocity(1000);
// 获取X轴和Y轴上的速度
int xVelocity = (int) velocityTracker.getXVelocity();
int yVelocity = (int) velocityTracker.getYVelocity();
// 重置和回收内存
velocityTracker.clear();
velocityTracker.recycle();

你可能感兴趣的:(读书笔记--MotionEvent)