velocitytracker是什么?
请问velocitytracker是什么?
@dgsfwer32w:android.view.VelocityTracker主要用跟踪触摸屏事件(flinging事件和其他gestures手势事件)的速率。用addMovement(MotionEvent)函数将Motion event加入到VelocityTracker类实例中.你可以使用getXVelocity() 或getXVelocity()获得横向和竖向的速率到速率时,但是使用它们之前请先调用computeCurrentVelocity(int)来初始化速率的单位 。
@fsfw3e4r23:踪触摸屏事件?
@fdsfw3e2432:VelocityTracker顾名思义即速度跟踪,在android中主要应用于touch event, VelocityTracker通过跟踪一连串事件实时计算出
当前的速度,这样的用法在android系统空间中随处可见,比如Gestures中的Fling, Scrolling等,下面简单介绍一下用法。
[html] view plaincopy
-
//获取一个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:
[html] view plaincopy
-
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后的减速运动等。实现一些非常棒的效果。
更多关注微信:xllx999
-
2019最新创业方法(附:上百个互联网创业成功案例)
2019-10-24浏览:15365
-
99%的大型企业产品运营都是这么做的(借助互联网思维来做产品运营)
2019-10-24浏览:9342
-
快速增加流量的方法(适合任意行业的网络推广技巧)
2019-10-24浏览:35264
-
虎门大桥恢复交通后车流顺畅
06-12浏览:1382
-
虎门大桥涡振是什么意思 虎门大桥简介
06-12浏览:1799
-
怎么样把一件事情做成功呢?
06-07浏览:123
-
全栈工程师自述:我的编程能力为什么突飞猛进?| 知乎4千4百赞
11-22浏览:1167
-
又一起相互宝拒赔案例,投保的时候得当心了
11-22浏览:1850