VelocityTracker顾名思义即速度跟踪,在android中主要应用于touch event(比如Gestures中的Fling, Scrolling等), VelocityTracker通过跟踪一连串事件实时计算出,下面简单介绍一下用法。

可参考:这篇文章的介绍

//获取一个VelocityTracker对象, 用完后记得回收 //回收后代表你不需要使用了,系统将此对象在此分配到其他请求者 static public VelocityTracker obtain();  public void recycle();   //计算当前速度, 其中units是单位表示, 1代表px/毫秒, 1000代表px/秒, .. //maxVelocity此次计算速度你想要的最大值 public void computeCurrentVelocity(int units, float maxVelocity);  //经过一次computeCurrentVelocity后你就可以用一下几个方法获取此次计算的值 //id是touch event触摸点的ID, 来为多点触控标识,有这个标识在计算时可以忽略 //其他触点干扰,当然干扰肯定是有的 public float getXVelocity();  public float getYVelocity();  public float getXVelocity(int id);  public float getYVelocity(int id); 
package com.github.c.horizonalscrollitem;import android.app.Activity;  import android.graphics.Color;  import android.os.Bundle;  import android.view.MotionEvent;  import android.view.VelocityTracker;  import android.view.ViewConfiguration;  import android.view.ViewGroup.LayoutParams;  import android.widget.TextView;  public class VelocityTrackerTest extends Activity {      private TextView mInfo;      private VelocityTracker mVelocityTracker;      private int mMaxVelocity;      private int mPointerId;      @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          mInfo = new TextView(this);          mInfo.setLines(4);          mInfo.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));          mInfo.setTextColor(Color.WHITE);          setContentView(mInfo);  // 0.获得此次最大速率        mMaxVelocity = ViewConfiguration.get(this).getMaximumFlingVelocity();      }      @Override      public boolean onTouchEvent(MotionEvent event) {          final int action = event.getAction();          acquireVelocityTracker(event);  //1.向VelocityTracker添加MotionEvent        final VelocityTracker verTracker = mVelocityTracker;          switch (action) {              case MotionEvent.ACTION_DOWN:                  //2.求第一个触点的id, 此时可能有多个触点,但至少一个                mPointerId = event.getPointerId(0);                  break;              case MotionEvent.ACTION_MOVE:                  //3.求伪瞬时速度                verTracker.computeCurrentVelocity(1000, mMaxVelocity);                  final float velocityX = verTracker.getXVelocity(mPointerId);                  final float velocityY = verTracker.getYVelocity(mPointerId);                  recodeInfo(velocityX, velocityY);                  break;              case MotionEvent.ACTION_UP:// 4.ACTION_UP释放VelocityTracker,交给其他控件使用                releaseVelocityTracker();                  break;// 5.ACTION_CANCEL释放VelocityTracker ,交给其他控件使用            case MotionEvent.ACTION_CANCEL:                  releaseVelocityTracker();                  break;              default:                  break;          }          return super.onTouchEvent(event);      }      /** * * @param event 向VelocityTracker添加MotionEvent * * @see android.view.VelocityTracker#obtain() * @see android.view.VelocityTracker#addMovement(MotionEvent) */      private void acquireVelocityTracker(final MotionEvent event) {          if(null == mVelocityTracker) {              mVelocityTracker = VelocityTracker.obtain();          }          mVelocityTracker.addMovement(event);      }      /** * 释放VelocityTracker * * @see android.view.VelocityTracker#clear() * @see android.view.VelocityTracker#recycle() */      private void releaseVelocityTracker() {          if(null != mVelocityTracker) {              mVelocityTracker.clear();              mVelocityTracker.recycle();              mVelocityTracker = null;          }      }      private static final String sFormatStr = "velocityX=%f\nvelocityY=%f";      /** * 记录当前速度 * * @param velocityX x轴速度 * @param velocityY y轴速度 */      private void recodeInfo(final float velocityX, final float velocityY) {          final String info = String.format(sFormatStr, velocityX, velocityY);          mInfo.setText(info);      }  }  

更多相关文章

  1. Android(安卓)View之基础介绍(Android开发艺术探索)
  2. Gradle Build速度加快终极方法
  3. Android属性动画---Property Animation(三)
  4. Android实现两个数相加功能
  5. Android小程序-模拟小球平抛落地反弹到静止过程
  6. Android实现iPhone晃动撤销输入功能 Android仿微信摇一摇功能
  7. Androidの重力感应
  8. Android在OnCreate中获取控件的宽度和高度
  9. Android(安卓)高效聚焦方案:计算图像模糊度触发聚焦

随机推荐

  1. C++基础知识一
  2. 仿PHP中文网首页部分布局
  3. 鼠标悬停,向前和向后翻页,实例演示 xhr对
  4. 轮播图:1: 实现鼠标悬停时自动停止播放,
  5. 购物车实例演示
  6. Androidの通过查询电话号码或ID获取联系
  7. Android(安卓)监听开机广播打开APP
  8. Android之路——第一个Android小程序(Andr
  9. android List拖动时背景变化
  10. android电话服务