VelocityTracker简单用法
来源:互联网 发布:centos搭建php网站 编辑:程序博客网 时间:2024/05/21 11:37
VelocityTracker顾名思义即速度跟踪,在android中主要应用于touch event, VelocityTracker通过跟踪一连串事件实时计算出
当前的速度,这样的用法在android系统空间中随处可见,比如Gestures中的Fling, Scrolling等,下面简单介绍一下用法。
//获取一个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);
下面是我写的一个简单Demo:
package com.bxwu.demo.component.activity;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); mMaxVelocity = ViewConfiguration.get(this).getMaximumFlingVelocity(); } @Override public boolean onTouchEvent(MotionEvent event) { final int action = event.getAction(); acquireVelocityTracker(event); final VelocityTracker verTracker = mVelocityTracker; switch (action) { case MotionEvent.ACTION_DOWN: //求第一个触点的id, 此时可能有多个触点,但至少一个 mPointerId = event.getPointerId(0); break; case MotionEvent.ACTION_MOVE: //求伪瞬时速度 verTracker.computeCurrentVelocity(1000, mMaxVelocity); final float velocityX = verTracker.getXVelocity(mPointerId); final float velocityY = verTracker.getYVelocity(mPointerId); recodeInfo(velocityX, velocityY); break; case MotionEvent.ACTION_UP: releaseVelocityTracker(); break; 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); }}
代码很简单,我们可以求出move过程中的伪瞬时速度, 这样在做很多控件的时候都是可以用到的,比如系统Launcher的分页,
ScrollView滑动等, 可根据此时的速度来计算ACTION_UP后的减速运动等。实现一些非常棒的效果。
- VelocityTracker简单用法
- VelocityTracker简单用法
- VelocityTracker简单用法
- android VelocityTracker简单用法
- android VelocityTracker简单用法
- VelocityTracker简单用法
- VelocityTracker简单用法
- VelocityTracker简单用法
- VelocityTracker简单用法
- android VelocityTracker的简单用法
- android VelocityTracker用法
- VelocityTracker的用法
- VelocityTracker的简单使用方法
- VelocityTracker的简单研究
- VelocityTracker的简单研究
- VelocityTracker的简单使用
- android VelocityTracker的简单研究
- VelocityTracker
- OTL电路与BTL电路有什么不同?
- 11级_Java_曹建波4.09 多态性&静态初始化块
- 什么是OTL
- oracle 动态SQL语句
- HTML5:使用postMessage实现Ajax跨域请求
- VelocityTracker简单用法
- 使用STL求第K大数
- linux下的time函数们
- 指定日期前一天的数据
- 使用window.name和postMessage实现js跨域
- g++编译优化指南
- 实现自己的string
- vs2010 创建dll
- ORA-12547经典错误处理