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类实例中.你可以使用getXVelocity() 或getXVelocity()获得横向和竖向的速率到速率时,但是使用它们之前请先调用computeCurrentVelocity(int)来初始化速率的单位 。

主要函数

Public Methods
void addMovement(MotionEvent event)

Add a user‘s movement to the tracker.

void clear()

Reset the velocity tracker back to its initial state.

void computeCurrentVelocity(int units, float maxVelocity)

Compute the current velocity based on the points that have been collected.

int unitis表示速率的基本时间单位。unitis值为1的表示是,一毫秒时间单位内运动了多少个像素, unitis值为1000表示一秒(1000毫秒)时间单位内运动了多少个像素

floatVelocity表示速率的最大值

void computeCurrentVelocity(int units)

Equivalent to invoking computeCurrentVelocity(int, float) with a maximum velocity of Float.MAX_VALUE.

abstract T getNextPoolable()
float getXVelocity()

Retrieve the last computed X velocity.

float getXVelocity(int id)

Retrieve the last computed X velocity.

float getYVelocity(int id)

Retrieve the last computed Y velocity.

float getYVelocity()

Retrieve the last computed Y velocity.

abstract boolean isPooled()
static VelocityTracker obtain()

Retrieve a new VelocityTracker object to watch the velocity of a motion.

void recycle()

Return a VelocityTracker object back to be re-used by others.

abstract void setNextPoolable(T element)
abstract void setPooled(boolean isPooled)

示例:

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  ()函数来获得当前的速度

布局文件  activity_main:

在这里,我们只定义了一个TextView用来显示等下我们的手指移动的速度,这里我们把它初始化为:hello  world

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

<TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="hello world" />

</RelativeLayout>

再下来是MainActivity:

public class MainActivity extends  Activity{

private TextView tv;

private  VelocityTracker  vt=null;

protect void onCreate(Bundle  savedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

tv=()findViewById(R.id.tv);

}

public   boolean onTouchEvent(MotionEvent  event){

int action=event.getAvtion();

switch(action){

case:MotionEvent.ACTION_DOWN:

if(vt==null){

//初始化velocityTracker的对象 vt 用来监测motionevent的动作

vt=VelocityTracker.obtain();

}else{

vt.clear();

}

vt.addMovement(event);

break;

case:MotionEvent.ACTION_MOVE:

vt.addMovement(event);

//代表的是监测每1000毫秒手指移动的距离(像素)即m/px,这是用来控制vt的单位,若括号内为1,则代表1毫秒手指移动过的像素数即ms/px

vt.computeCurrentVelocity(1000);

//这里x为正则代表手指向右滑动,为负则代表手指向左滑动,y的比较特殊,为正则代表手指向下滑动,为负则代表手指向上滑动

tv.setText("the x velocity is"+vt.getXVelocity);

tv.append("the y velocity is"+vt.getYVelocity);

break;

case:MotionEvent.ACTION_UP:

case:MotionEvent.CANCEL:

vt.recycle();

break;

}

return true;

}

}

时间: 2024-10-11 08:54:06

Android VelocityTracker 速度监测的相关文章

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

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

转: 加快Android编译速度

转: http://timeszoro.xyz/2015/11/25/%E5%8A%A0%E5%BF%ABandroid%E7%BC%96%E8%AF%91%E9%80%9F%E5%BA%A6/ 加快Android编译速度 发表于 2015-11-25   | 对于Android开发者而言,随着工程不断的壮大,Android项目的编译时间也逐渐变长,即便是有时候添加一行代码也需要等待好久才能看见期待的效果.之前加快Android编译的工具相对较少,其中最具有代表性的开源项目当属FaceBook的

Android内存泄漏监测(MAT)及解决办法

http://ttlnews.blogspot.com/2010/01/attacking-memory-problems-on-android.html 这篇文章是2010年1月份写的,其中有些已经不适合现在的Android机制了 我将内存问题分为两种:OOM和堆栈溢出 一个Android进程可以分配的最大堆内存(heap memory)为 16M(现在各个定制版本的Android系统都不一样) 如果你将重复打开关闭一个Activity20次,就有可能出现内存溢出,那么在哪里内存溢出了,在哪里

Android(Linux)实时监测串口数据

之前在做WinCE车载方案时,曾做过一个小工具TraceMonitor,用于显示WinCE系统上应用程序的调试信息,特别是在实车调试时,用于显示CAN盒与主机之间的串口数据.因为需要抢占市场先机,经常在新车上市前,就得配合CAN解码盒厂商同步调试车机端软件.这时候,TraceMonitor就可能派上大用场.遇到说不清是哪一边的问题时,抓数据一看,就清清楚楚了.有时终端客户的机器出现了原车功能异常的问题,也可以直接运行该工具,实时抓取串口数据提供给我们以分析问题原因.不过该工具需要业务应用程序做特

Android -- VelocityTracker

VelocityTracker 主要应用于touch event, VelocityTracker通过跟踪一连串事件实时计算出当前的速度. 方法 //获取一个VelocityTracker对象, 用完后记得回收 //回收后代表你不需要使用了,系统将此对象在此分配到其他请求者 static public VelocityTracker obtain(); public void recycle(); //计算当前速度, 其中units是单位表示, 1代表px/毫秒, 1000代表px/秒, ..

Android开机速度优化简单回顾

Android的开机速度,基本上没人说快的,通常移植完系统后,马上要看的事情就是优化开机时间,以下是简单回忆以下以前做优化的那些事. 开机时间都花在哪? 优化开机时间,通常做的首先是那有有没有BUG,明显不合理的先解决,由于开发阶段稳定性问题,一些地方可能延时加的大,或者频率设的低,先记下来,后面定期还会再看.这些先不看的话,一般拿到机器,我们统计开机时间,主要看如下几个时间段分布: 开机按键时间.亮屏时间(基本固定,除非弄错了,基本检查一遍确定) uboot启动时间 内核启动后到bootani

提升Android编译速度

Android codebase都非常大.编译一次都须要花非常多时间.假设是preloader/lk/bootimage还好,可是Android的话都是非常久. 实际上这个编译时间还是能够进一步缩短! 1. 移除modules_to_check (1). Android默认是全部模块都会编译的(无论需不须要),这个有些冗余,能够通过改动编译系统不编译哪些没实用到的模块 (2). 改动方法:alps/build/core/main.mk files: prebuilt \ $(modules_to

android源码大放送(实战开发必备),免费安卓demo源码,例子大全文件详细列表

免费安卓demo源码,例子大全文件详细列表 本列表源码永久免费下载地址:http://www.jiandaima.com/blog/android-demo 卷 yunpan 的文件夹 PATH 列表 卷序列号为 0000-73EC E:. │ jiandaima.com文件列表生成.bat │ 例子大全说明.txt │ 本例子永久更新地址~.url │ 目录列表2016.03.10更新.txt │ ├─前台界面 │ ├─3D标签云卡片热门 │ │ Android TagCloudView云标签

它们的定义android滑动菜单

在这里实现了两个滑动菜单效果,的拖放内容的第一部分,菜单拖出像这样的效果感觉,另一种是拖动内容.后面的内容固定菜单.我感觉有层次感的效果,如下面 第一种效果的代码实现例如以下: package com.tenghu.customsideslip.menu.view; import android.content.Context; import android.os.AsyncTask; import android.util.AttributeSet; import android.util.D