滑动动速度跟踪类VelocityTracker介绍
来源:互联网 发布:好看编程图片 编辑:程序博客网 时间:2024/04/30 06:54
VelocityTracker顾名思义即速度跟踪,在android中主要应用于touch even。, VelocityTracker通过跟踪一连串事件实时计算出当前的速度,这样的用法在android系统空间中随处可见,比如Gestures中的Fling, Scrolling等。
android.view.VelocityTracker主要用跟踪触摸屏事件(flinging事件和其他gestures手势事件)的速率。用addMovement(MotionEvent)函数将Motion event加入到VelocityTracker类实例中.你可以使用getXVelocity() 或getXVelocity()获得横向和竖向的速率到速率时,但是使用它们之前请先调用computeCurrentVelocity(int)来初始化速率的单位 。
主要函数
Add a user's movement to the tracker.
Reset the velocity tracker back to its initial state.
Compute the current velocity based on the points that have been collected.
intunitis表示速率的基本时间单位。unitis值为1的表示是,一毫秒时间单位内运动了多少个像素, unitis值为1000表示一秒(1000毫秒)时间单位内运动了多少个像素
floatVelocity表示速率的最大值
Equivalent to invoking computeCurrentVelocity(int, float)
with a maximum velocity of Float.MAX_VALUE.
Retrieve the last computed X velocity.
Retrieve the last computed X velocity.
Retrieve the last computed Y velocity.
Retrieve the last computed Y velocity.
Retrieve a new VelocityTracker object to watch the velocity of a motion.
Return a VelocityTracker object back to be re-used by others.
示例:
private VelocityTracker mVelocityTracker;
//生命变量
//在onTouchEvent(MotionEvent ev)中
if
(mVelocityTracker ==
null
) {
mVelocityTracker = VelocityTracker.obtain();
//获得VelocityTracker类实例
}
mVelocityTracker.addMovement(ev);
//将事件加入到VelocityTracker类实例中
//判断当ev事件是MotionEvent.ACTION_UP时:计算速率
final VelocityTracker velocityTracker = mVelocityTracker;
// 1000 provides pixels per second
velocityTracker.computeCurrentVelocity(1, (float)0.01);
//设置maxVelocity值为0.1时,速率大于0.01时,显示的速率都是0.01,速率小于0.01时,显示正常
Log.i(
"test"
,
"velocityTraker"
+velocityTracker.getXVelocity());
velocityTracker.computeCurrentVelocity(1000);
//设置units的值为1000,意思为一秒时间内运动了多少个像素
Log.i(
"test"
,
"velocityTraker"
+velocityTracker.getXVelocity());
大体的使用是这样的:
当你需要跟踪触摸屏事件的速度的时候,使用obtain()方法来获得VelocityTracker类的一个实例对象
在onTouchEvent回调函数中,使用addMovement(MotionEvent)函数将当前的移动事件传递给VelocityTracker对象
使用computeCurrentVelocity (int units)函数来计算当前的速度,使用getXVelocity ()、 getYVelocity ()函数来获得当前的速度
下面是我写的一个简单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类 滑动速度跟踪
- TouchEvent事件中的 速度跟踪类----------------VelocityTracker----
- Android VelocityTracker 速度跟踪器
- Android VelocityTracker获取滑动速度
- android velocityTracker滑动速度检测器简单使用
- VelocityTracker类的介绍
- VelocityTracker类介绍
- 利用VelocityTracker监控对触摸的速度跟踪
- 利用VelocityTracker监控对触摸的速度跟踪
- 利用VelocityTracker获取手指在屏幕上的滑动速度
- 使用VelocityTracker获取在屏幕滑动的速度
- android view滑动助手类 OverScroller VelocityTracker
- Android中的VelocityTracker(速度追踪器)的介绍
- VelocityTracker监控速度!!!
- VelocityTracker监控速度
- Qt的元对象系统
- WeakReference与SoftReference
- LeetCdoe Minimum Path Sum
- Cordys BOP 4平台开发入门实战演练——Webservices开发(初级)
- MediaWiki安装笔记
- 滑动动速度跟踪类VelocityTracker介绍
- 指针取值(*)与自增(++)运算
- 毕晓英3-28第二章6-9题
- 类的加载顺序
- spring定时调用数据库存储过程
- Ubuntu开启远程控制的方法
- B - 家
- URAL 1507 Difficult Decision 矩阵快速幂
- 动态页面技术(jsp)基础知识