Android -- VelocityTracker

VelocityTracker

主要应用于touch event, 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);

Code

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);  

        mMaxVelocity = ViewConfiguration.get(this).getMaximumFlingVelocity();
    }  

    @Override
    public boolean onTouchEvent(MotionEvent event) {
         if(null == mVelocityTracker) {
            mVelocityTracker = VelocityTracker.obtain();
        }
        mVelocityTracker.addMovement(event);
        final VelocityTracker verTracker = mVelocityTracker;
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                //求第一个触点的id, 此时可能有多个触点,但至少一个
                mPointerId = event.getPointerId(0);
                break;  

            case MotionEvent.ACTION_MOVE:
                //求伪瞬时速度
                verTracker.computeCurrentVelocity(1000, mMaxVelocity);
                float velocityX = verTracker.getXVelocity(mPointerId);
                float velocityY = verTracker.getYVelocity(mPointerId);
                recodeInfo(velocityX, velocityY);
                break;  

            case MotionEvent.ACTION_UP:
            case MotionEvent.ACTION_CANCEL:
                  if(null != mVelocityTracker) {
              mVelocityTracker.clear();
              mVelocityTracker.recycle();
              mVelocityTracker = null;
                  }
                break;  

            default:
                break;
        }
        return super.onTouchEvent(event);
    }  

    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);
    }
}

我是天王盖地虎的分割线

参考:http://blog.csdn.net/bingxianwu/article/details/7446799

时间: 2024-11-10 23:43:12

Android -- VelocityTracker的相关文章

Android VelocityTracker 速度监测

转载http://blog.csdn.net/wobilini/article/details/9071579 转载http://blog.csdn.net/hudashi/article/details/7352157 android.view.VelocityTracker主要用跟踪触摸屏事件(flinging事件和其他gestures手势事件)的速率.用addMovement(MotionEvent)函数将Motion event加入到VelocityTracker类实例中.你可以使用ge

android VelocityTracker 速度追踪器的使用及创建

VelocityTracker 速度追踪 第一,创建方式: VelocityTracker  mVelocityTracker  = new VelocityTracker .obtain() 第二,把你要追求的MotionEvent 注册到VelocityTracker 的监听中: mVelocityTracker.addMovement(event); 第三,设置VelocityTracker的单位,1000表示1秒时间内运动的像素,获取追踪到的X轴的像素和Y轴的像素: mVelocityT

【转】android 手势识别和VelocityTracker

参考地址: http://jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1020/448.html http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2012/1117/574.html 一.Android的手势操作识别 1.在android应用当中每一次手势的交互都都会依照如下顺序去执行的 刚接触到手机屏幕的时候,要触发MotionEvent事件 该事件被OnTouchListener监

代码讲解Android Scroller、VelocityTracker

在编写自定义滑动控件时常常会用到Android触摸机制和Scroller及VelocityTracker.Android Touch系统简介(二):实例详解onInterceptTouchEvent与onTouchEvent的调用过程对Android触摸机制需要用到的函数进行了详细的解释,本文主要介绍两个重要的类:Scroller及VelocityTracker.利用上述知识,最后给出了一个自定义滑动控件的demo,该demo类似于ImageGallery.ImageGallery一般是用Gri

代码解说Android Scroller、VelocityTracker

在编写自己定义滑动控件时经常会用到Android触摸机制和Scroller及VelocityTracker.Android Touch系统简单介绍(二):实例具体解释onInterceptTouchEvent与onTouchEvent的调用过程对Android触摸机制须要用到的函数进行了具体的解释.本文主要介绍两个重要的类:Scroller及VelocityTracker.利用上述知识,最后给出了一个自己定义滑动控件的demo,该demo类似于ImageGallery. ImageGallery

[学习总结]2、android中的VelocityTracker(获得速率用的类)

参考资料:http://blog.jrj.com.cn/4586793646,5298605a.html 感谢这位兄弟! android.view.VelocityTracker主要用跟踪触摸屏事件(flinging事件和其他gestures手势事件)的速率,为up之后做一些效果用的. 1,用obtain()函数来获得类的实例. 2,常用的一些方法: 2.1,使用addMovement(MotionEvent event)函数将当前的移动事件传递给VelocityTracker对象,参数是事件对

android.view.VelocityTracker

顾名思义即速率跟踪者,主要用来跟踪触摸事件(flinging和getsture)的速率,在UI特效的设计上非常有用. 使用时: step1:通过VelocityTracker.obtain()方法实例化. step2:使用addMovement(MotionEvent)指定检测对象. step3:通过getXVelocity()获得横向滑动的速率(竖向于此类似). 对VelocityTracker的掌握是里面几个方法的使用: 1.  public static VelocityTracker o

Android Scroller类和VelocityTracker类

Scroller类 Scroller类封装了滚动,用于计算view滚动的位置,可以设置滚动发生的时长,滚动结束时computeScrollOffset函数会返回false,否则返回true. 常用函数: public void startScroll(int startX,int startY,int dx,int dy,int duration):设置滚动的起点坐标,横轴和纵轴滚动的距离以及滚动的时间.要注意的是dx<0是往右滚动,dy<0是往下滚动 public boolean compu

android学习之VelocityTracker

今天大概的学习了一下 VelocityTracker ,用来监控手势速度的,在View移动过程中,可以有个缓冲的移动.  我觉得初步的使用起来是很简单的. 首先移动依靠的是Scroller类,Scroller中有个fling的方法,将MotionEvent的Up之后检测的手势速度提供给scroller之后,就可以自己完成滚动. 1.初始化有些变量: private void init(Context context){ mScroller = new Scroller(getContext())