1.简介

VelocityTracker是android提供的用来记录滑动速度的一个类,可以监控手指移动的速度。

 

 

2.VelocityTracker常用方法

 

2.1.

方法:public static VelocityTracker obtain()

作用:获取一个新的VelocityTracker对象。

 

2.2.

方法:public void recycle()

作用:返回一个VelocityTracker对象以供其他人重用。

 

2.3.

方法:public void addMovement(MotionEvent event)

作用:向跟踪器添加用户的移动。

 

2.4.

方法:public float getXVelocity()

作用:检索最后计算的X速度。

 

2.5.

方法:public float getYVelocity()

作用:检索最后计算的Y速度。

 

2.6.

方法:public void clear()

作用:将速度跟踪器重置为初始状态。

 

2.7.

方法:public void computeCurrentVelocity(int units)

作用:计算过去unitsms内的速度。这个速度其实就是 ((当前的位置)-(之前的位置))/时间.如果得到的值为200            就表示这1000ms内,X方向移动了200像素。速度是有正负的,右划就是正的,左划就是负的,上划为负,          下划为正。

 

 

2.8.

方法:public void computeCurrentVelocity(int units, float maxVelocity)

作用:计算过去unitsms内的速度。maxVelocity:最大速度,实际上是一个上限,比如我们当前速度300,但是上限为200,那用getXVelocity()得到的值就是200,不可能超过上限(无论正负)。

 

 

 

 

 

3.配合onTouch使用

 

布局

<?xml version="1.0" encoding="utf-8"?>

 

 

 

Java代码

public class MotionEventActivity extends AppCompatActivity {    private TextView textView;    private int lastX;    private int lastY;    private VelocityTracker velocityTracker;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_motionevent);        if(velocityTracker == null) {//velocityTracker对象为空 获取velocityTracker对象            velocityTracker = VelocityTracker.obtain();        }else {//velocityTracker对象不为空 将velocityTracker对象重置为初始状态            velocityTracker.clear();        }        textView= (TextView) findViewById(R.id.activity_motionevent_textview);        textView.setOnTouchListener(new View.OnTouchListener() {            @Override            public boolean onTouch(View view, MotionEvent motionEvent) {                int action=motionEvent.getAction();                int x= (int) motionEvent.getRawX();                int y= (int) motionEvent.getRawY();                velocityTracker.addMovement(motionEvent);//向velocityTracker对象添加action                switch(action){                    case MotionEvent.ACTION_DOWN://按下                        lastX=x;                        lastY=y;                        break;                    case MotionEvent.ACTION_MOVE://移动                        velocityTracker.computeCurrentVelocity(1000);                        Log.d("TAG", "移动X velocity: " + velocityTracker.getXVelocity());                        Log.d("TAG", "移动Y velocity: " + velocityTracker.getYVelocity());                        break;                    case MotionEvent.ACTION_UP://抬起                        velocityTracker.computeCurrentVelocity(1000);                        Log.d("TAG", "抬起X velocity: " + velocityTracker.getXVelocity());                        Log.d("TAG", "抬起Y velocity: " + velocityTracker.getYVelocity());                        break;                }                return false;            }        });    }    /**     * onDestroy方法     * */    @Override    protected void onDestroy() {        super.onDestroy();        if (velocityTracker != null) {            velocityTracker.recycle();            velocityTracker = null;        }    }}

 

效果:

 

 

 

 

 

 

附:VelocityTracker官方链接

https://developer.android.google.cn/reference/android/view/VelocityTracker

更多相关文章

  1. 让editView、AutoCompleteTextView开始捕获的焦点
  2. Android(安卓)Studio开发学习(十三)——Fragment
  3. Android全屏的两种方法
  4. Android(安卓)JNI编程内存问题定位方法
  5. [置顶] 彻底解决Android(安卓)应用方法数不能超过65K的问题
  6. Android(安卓)之 ContentProvider 共享数据库-通讯录
  7. Android中onConfigurationChanged监视系统配置更新
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. ListView的一些属性设置
  2. Android平台开发-Power management-电源
  3. Android(安卓)SDK Manager无法更新的解决
  4. Android(安卓)studio 提取文件指定字符串
  5. [Android(安卓)Pro] Android的5个进程等
  6. Android:如何显示网络图片
  7. Android(安卓)Studio 下载 与 安装 详细
  8. Android(安卓)tips2
  9. android sdk manager 闪退 打不开问题
  10. 探寻 Android(安卓)代码抄袭细节,情节还不