帮助你追踪一个touch事件(flinging事件和其他手势事件)的速率。当你要跟踪一个touch事件的时候,使用obtain()方法得到这个类的实例,然后 用addMovement(MotionEvent)函数将你接受到的motion event加入到VelocityTracker类实例中。当你使用到速率时,使用computeCurrentVelocity(int)初始化速率的单位,并获得当前的事件的速率,然后使用getXVelocity() 或getXVelocity()获得横向和竖向的速率。

从上面的介绍中,我们就可以很简单的明白,如何去使用VelocityTracker类去追踪一个移动事件的速率。

用法详解:

1、    //首先获得VelocityTracker的实例/*** obtain()的方法介绍* Retrieve a new VelocityTracker object to watch the velocity of a motion. * Be sure to call recycle() when done. You should generally only maintain * an active object while tracking a movement, so that the VelocityTracker * can be re-used elsewhere.* 翻译:* 得到一个速率追踪者对象去检测一个事件的速率。确认在完成的时候调用recycle()方法。* 一般情况下,你只要维持一个活动的速率追踪者对象去追踪一个事件,那么,这个速率追踪者* 可以在别的地方重复使用。*/VelocityTracker mVelocityTracker = null;if (mVelocityTracker == null) {mVelocityTracker = VelocityTracker.obtain();}2、    //假设有一个事件event,将事件加入到VelocityTracker类实例中 /*** addMovement (MotionEvent event)方法介绍* Add a user's movement to the tracker. You should call this for the initial * ACTION_DOWN, the following ACTION_MOVE events that you receive,*  and the final ACTION_UP. You can, however, call this for whichever events *  you desire.*  翻译:向速率追踪者中加入一个用户的移动事件,你应该最先在ACTION_DOWN调用这个方法,*  然后在你接受的ACTION_MOVE,最后是ACTION_UP。你可以为任何一个你愿意的事件调用该方法*/mVelocityTracker.addMovement(event);3、//判断当事件MotionEvent.ACTION_UP的时候,调用下面的方法/*** public void computeCurrentVelocity (int units, float maxVelocity)方法介绍:* Compute the current velocity based on the points that have been* collected. Only call this when you actually want to retrieve velocity* information, as it is relatively expensive. You can then retrieve the* velocity with {@link #getXVelocity()} and {@link #getYVelocity()}.* * @param units*            The units you would like the velocity in. A value of 1*            provides pixels per millisecond, 1000 provides pixels per*            second, etc.* @param maxVelocity*            The maximum velocity that can be computed by this method. This*            value must be declared in the same unit as the units*            parameter. This value must be positive.* 翻译:基于你所收集到的点计算当前的速率。       当你确定要获得速率信息的时候,在调用该方法,* 因为使用它需要消耗很大的性能。然后,你可以通过getXVelocity()和getYVelocity()获得横向和竖向的速率。* * 参数:units  你想要指定的得到的速度单位,如果值为1,代表1毫秒运动了多少像素。如果值为1000,代表* 1秒内运动了多少像素。* * 参数:maxVelocity  该方法所能得到的最大速度,这个速度必须和你指定的units使用同样的单位,而且* 必须是整数。(也就是,你指定一个速度的最大值,如果计算超过这个最大值,就使用这个最大值,否则,使用计算的的结果)* * public void computeCurrentVelocity (int units)方法介绍* 这个方法与上面的方法没什么差别,就是在maxVelocity上,他会自动使用Float.MAX_VALUE常量*/mVelocityTracker.computeCurrentVelocity(1000, mMaximumFlingVelocity);    4、//然后调用getXVelocity ()、getXVelocity (int id)、getYVelocity ()、getYVelocity (int id)得到速率/*** 调用这几个方法之前,必须确定你之前调用了computeCurrentVelocity方法。* 参数 id   代表返回指定触点的速率*/Log.i("test", mVelocityTracker.getXVelocity() + "");Log.i("test", mVelocityTracker.getYVelocity() + "");

在附上一个使用实例:

public class GestureTestActivity extends Activity {private GestureDetector gestureDetector;private VelocityTracker mVelocityTracker = null;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);gestureDetector = new GestureDetector(this, new GestureListener());gestureDetector.setIsLongpressEnabled(false);}@Overridepublic boolean onTouchEvent(MotionEvent event) {int action = event.getAction();if (mVelocityTracker == null) {mVelocityTracker = VelocityTracker.obtain();}mVelocityTracker.addMovement(event);switch (action) {case MotionEvent.ACTION_DOWN:Log.i("test", "ACTION_DOWN");break;case MotionEvent.ACTION_MOVE:// 移动的时候Log.i("test", "ACTION_MOVE");break;case MotionEvent.ACTION_UP:mVelocityTracker.computeCurrentVelocity(1000);Log.i("test", "ACTION_UP");Log.i("11111", mVelocityTracker.getXVelocity(0) + "");Log.i("11111", mVelocityTracker.getYVelocity(0) + "");break;}return gestureDetector.onTouchEvent(event);}// 继承于SimpleOnGestureListener,实现所有事件监听方法private class GestureListener extends SimpleOnGestureListener {@Overridepublic boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {Log.i("test", "onFling  -----------------------");Log.i("2222", velocityX + "");Log.i("2222", velocityY + "");return super.onFling(e1, e2, velocityX, velocityY);}}@Overrideprotected void onDestroy() {super.onDestroy();//释放
        mVelocityTracker.recycle();mVelocityTracker=null;}
}

转 http://blog.csdn.net/lonelyroamer/article/details/7560598

转载于:https://www.cnblogs.com/622698abc/archive/2013/03/26/2983615.html

滑轮控件研究四、VelocityTracker的简单研究相关推荐

  1. Xamarin XAML语言教程构建ControlTemplate控件模板 (四)

    Xamarin XAML语言教程构建ControlTemplate控件模板 (四) 2.在页面级别中构建控件模板 如果开发者要在页面级别中构建控件模板,首先必须将ResourceDictionary添 ...

  2. 安卓APP_ 控件(11)webView —— 简单应用:显示网页

    摘自:安卓APP_ 控件(11)webView -- 简单应用:显示网页 作者:丶PURSUING 发布时间: 2021-05-11 11:50:52 网址:https://blog.csdn.net ...

  3. 【Android】Anroid5.0+新控件---酷炫标题栏的简单学习

    Android5.0+推出的新控件感觉特别酷,最近想模仿大神做个看图App出来,所以先把这些新控件用熟悉了. 新控件的介绍.使用等等网上相应的文章已经特别多了,题主也没那能力去写篇详解出来,本篇随笔记 ...

  4. easyui 动态设置单元格控件_比Excel还简单,实现动态报表原来只需要十分钟!

    做过报表的人,尤其是经常有报表需求的人,想必都会有这样一个困惑: 为什么同样是做报表,其他人的报表就能够得到领导的肯定,而自己的报表就会被老板丢掉一边? 这个问题其实很好回答,你想一想,如果你是老板, ...

  5. 为DataGrid创建自定义列控件(四)

    全选和多选的功能在DataGrid中使用的时候很多,以前我们都是创建CheckBox模板列,然后在后台中捕获ChecnkBox的选择情况来实现全选或多选.现在为了加快开发的速度,使用这个CheckBo ...

  6. C#:C#控件系列四(列表类控件)

    列表类控件 1. ListBox 控件: ListBox控件又称列表框,它在工具箱中的图标为,它显示一个项目列表供用户选择. 在列表框中,用户一次可以选择一项,也可以选择多项. 1.1. 常用属性: ...

  7. android组合控件的焦点,撸一个简单的TV版焦点控制的日历控件

    1.效果 最近需求要一个遥控控制的日历控件,找了半天没找到轮子,就自己撸一个,先看效果图: 效果图.gif 2.XML属性,所有属性默认为效果图 calender_textSize:星期和日期的字体大 ...

  8. C#控件之Windows Media Player简单加载视频播放

    1.在工具箱里面添加控件Windows Media Player,默认初始工具箱是没有的 随便找个工具箱里面的空间右键-选择项 在com组件下选择 2.拖入面板Windows Media Player ...

  9. 用WPF做报表控件(四)

    表主体和表尾 表主体并没有什么难点,就是一个DataGrid,往里面填充数据即可.表尾显示的是一些统计数据,如平均值.最大值.最小值.累计值等.在这一部分的开发里面,最复杂的是水平滚动条的问题. 一开 ...

  10. mre下的控件实现(四、Button使用)

    这里有一个实例使用(一.实现)中的按钮控件,达到的效果如下图所示, 用mre sdk(这里使用的是mre sdk 2.5版本)创建一个工程,工程名为mtid(实际上这个是我要在做一个工具). //生成 ...

最新文章

  1. unbuntu下安装flash插件
  2. 不是广告--如何学Java,我说点不太一样的学习方式
  3. JAVA 和.NET在安全功能的比较
  4. MySQL AHI 实现解析
  5. SQLSERVER排查CPU占用高的情况
  6. 主板和cpu搭配表_GTX1650显卡搭配知识:GTX1650配什么CPU和主板及多大电源?
  7. 《BeagleBone开发指南》——1.3 BeagleBone硬件
  8. 面试和人生目标(转)
  9. 函数作为返回值练习 作用域和作用域链及预解析 闭包 闭包小案例
  10. java简单纸牌游戏_2020年最佳2人棋盘游戏:拼凑,Kingdomino等
  11. hadoop实训报告总结及体会_管理工程学院举办电子商务实训表彰大会
  12. python制作一个计时器_如何在python中创建一个反应计时器作为GUI?
  13. 【转】XSD (xml Schema Definition)
  14. Swift 团队开源 Collections,提供更多高效数据结构
  15. Objective C 单例实现
  16. Linux_Centos7在安装Mysql常见错误依赖时失败——error: Failed dependencies:mariadb-libs is obsoleted
  17. 生成永不过期的微信群二维码
  18. python 删除所有空间说说_怎么批量删除QQ空间说说?
  19. mysql消息已读未读_Redis实现信息已读未读状态提示
  20. Chrome 创建快捷方式后在单页面打开网页内容

热门文章

  1. ❤️ 爆赞,基础又全面的Linux命令合集!学都学不完...【汇总】
  2. 能不能做好性能测试,要看你有没有性能测试思维
  3. 人声处理_科唛课堂——人声的音频后期处理
  4. android 是什么编码格式,在Android的JPG图像编码和解码
  5. CGAL1_1 Three Points and One Segment
  6. oledb连接服务器的文件,请教OLEDB链接和ODBC链接连接的不同和对系统的要求...
  7. html行分割,如何确定一个html标签是否分割成多行
  8. 华为系统p40pro计算机,华为P40 Pro:我来了!
  9. python vector变量_用Python实现因子分析
  10. matlab晶闸管没有触发就导通,单相全控桥式晶闸管整流电路(纯电阻负载)