VelocityTracker简单用法

VelocityTracker顾名思义即速度跟踪,在android中主要应用于touch event, VelocityTracker通过跟踪一连串事件实时计算出

当前的速度,这样的用法在android系统空间中随处可见,比如Gestures中的Fling, Scrolling等,下面简单介绍一下用法。

[html] view plaincopy
  1. //获取一个VelocityTracker对象, 用完后记得回收
  2. //回收后代表你不需要使用了,系统将此对象在此分配到其他请求者
  3. static public VelocityTracker obtain();
  4. public void recycle();
  5. //计算当前速度, 其中units是单位表示, 1代表px/毫秒, 1000代表px/秒, ..
  6. //maxVelocity此次计算速度你想要的最大值
  7. public void computeCurrentVelocity(int units, float maxVelocity);
  8. //经过一次computeCurrentVelocity后你就可以用一下几个方法获取此次计算的值
  9. //id是touch event触摸点的ID, 来为多点触控标识,有这个标识在计算时可以忽略
  10. //其他触点干扰,当然干扰肯定是有的
  11. public float getXVelocity();
  12. public float getYVelocity();
  13. public float getXVelocity(int id);
  14. public float getYVelocity(int id);

下面是我写的一个简单Demo:

[html] view plaincopy
  1. package com.bxwu.demo.component.activity;
  2. import android.app.Activity;
  3. import android.graphics.Color;
  4. import android.os.Bundle;
  5. import android.view.MotionEvent;
  6. import android.view.VelocityTracker;
  7. import android.view.ViewConfiguration;
  8. import android.view.ViewGroup.LayoutParams;
  9. import android.widget.TextView;
  10. public class VelocityTrackerTest extends Activity {
  11. private TextView mInfo;
  12. private VelocityTracker mVelocityTracker;
  13. private int mMaxVelocity;
  14. private int mPointerId;
  15. @Override
  16. protected void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. mInfo = new TextView(this);
  19. mInfo.setLines(4);
  20. mInfo.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
  21. mInfo.setTextColor(Color.WHITE);
  22. setContentView(mInfo);
  23. mMaxVelocity = ViewConfiguration.get(this).getMaximumFlingVelocity();
  24. }
  25. @Override
  26. public boolean onTouchEvent(MotionEvent event) {
  27. final int action = event.getAction();
  28. acquireVelocityTracker(event);
  29. final VelocityTracker verTracker = mVelocityTracker;
  30. switch (action) {
  31. case MotionEvent.ACTION_DOWN:
  32. //求第一个触点的id, 此时可能有多个触点,但至少一个
  33. mPointerId = event.getPointerId(0);
  34. break;
  35. case MotionEvent.ACTION_MOVE:
  36. //求伪瞬时速度
  37. verTracker.computeCurrentVelocity(1000, mMaxVelocity);
  38. final float velocityX = verTracker.getXVelocity(mPointerId);
  39. final float velocityY = verTracker.getYVelocity(mPointerId);
  40. recodeInfo(velocityX, velocityY);
  41. break;
  42. case MotionEvent.ACTION_UP:
  43. releaseVelocityTracker();
  44. break;
  45. case MotionEvent.ACTION_CANCEL:
  46. releaseVelocityTracker();
  47. break;
  48. default:
  49. break;
  50. }
  51. return super.onTouchEvent(event);
  52. }
  53. /**
  54. *
  55. * @param event 向VelocityTracker添加MotionEvent
  56. *
  57. * @see android.view.VelocityTracker#obtain()
  58. * @see android.view.VelocityTracker#addMovement(MotionEvent)
  59. */
  60. private void acquireVelocityTracker(final MotionEvent event) {
  61. if(null == mVelocityTracker) {
  62. mVelocityTracker = VelocityTracker.obtain();
  63. }
  64. mVelocityTracker.addMovement(event);
  65. }
  66. /**
  67. * 释放VelocityTracker
  68. *
  69. * @see android.view.VelocityTracker#clear()
  70. * @see android.view.VelocityTracker#recycle()
  71. */
  72. private void releaseVelocityTracker() {
  73. if(null != mVelocityTracker) {
  74. mVelocityTracker.clear();
  75. mVelocityTracker.recycle();
  76. mVelocityTracker = null;
  77. }
  78. }
  79. private static final String sFormatStr = "velocityX=%f\nvelocityY=%f";
  80. /**
  81. * 记录当前速度
  82. *
  83. * @param velocityX x轴速度
  84. * @param velocityY y轴速度
  85. */
  86. private void recodeInfo(final float velocityX, final float velocityY) {
  87. final String info = String.format(sFormatStr, velocityX, velocityY);
  88. mInfo.setText(info);
  89. }
  90. }

代码很简单,我们可以求出move过程中的伪瞬时速度, 这样在做很多控件的时候都是可以用到的,比如系统Launcher的分页,

ScrollView滑动等, 可根据此时的速度来计算ACTION_UP后的减速运动等。实现一些非常棒的效果。

VelocityTracker简单用法相关推荐

  1. 反编译工具jad简单用法

    反编译工具jad简单用法 下载地址: [url]http://58.251.57.206/down1?cid=B99584EFA6154A13E5C0B273C3876BD4CC8CE672& ...

  2. QCustomPlot的简单用法总结

    QCustomPlot的简单用法总结 第一部分:QCustomPlot的下载与安装 第二部分:QCustomPlot在VS2013+QT下的使用 QCustomPlot的简单用法总结    写在前面, ...

  3. python matplotlib 简单用法

    python matplotlib 简单用法 具体内容请参考官网 代码 import matplotlib.pyplot as plt import numpy as np # 支持中文 plt.rc ...

  4. Windump网络命令的简单用法

    Windump网络命令的简单用法 大家都知道,unix系统下有个tcpdump的抓包工具,非常好用,是做troubleshooting的好帮手.其实在windows下也有一个类似的工作,叫windum ...

  5. Android TabLayout(选项卡布局)简单用法实例分析

    本文实例讲述了Android TabLayout(选项卡布局)简单用法.分享给大家供大家参考,具体如下: 我们在应用viewpager的时候,经常会使用TabPageIndicator来与其配合.达到 ...

  6. shell expect的简单用法

    为什么需要expect?     我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如 telnet服务器等进 ...

  7. Shellz中awk的简单用法

    其实shell脚本的功能常常被低估.在实际应用中awk sed 等用法可以为shell提供更为强大的功能.下面我们将一下awk调用的简单方法进行了总结.方便同学们学习: awk的简单用法: 第一种调用 ...

  8. python装饰器实例-Python装饰器原理与简单用法实例分析

    本文实例讲述了Python装饰器原理与简单用法.分享给大家供大家参考,具体如下: 今天整理装饰器,内嵌的装饰器.让装饰器带参数等多种形式,非常复杂,让人头疼不已.但是突然间发现了装饰器的奥秘,原来如此 ...

  9. python装饰器实例-Python装饰器简单用法实例小结

    本文总结分析了Python装饰器简单用法.分享给大家供大家参考,具体如下: 装饰器在python中扮演着很重要的作用,例如插入日志等,装饰器可以为添加额外的功能同时又不影响业务函数的功能. 比如,运行 ...

  10. 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 最简单用法 | 一行代码搞定权限申请 | 推荐用法 )

    文章目录 一.添加依赖 二.在 AndroidManifest.xml 中配置权限 三.权限申请最简单用法 四.推荐使用的用法 五.GitHub 地址 上一篇博客 [Android 应用开发]Goog ...

最新文章

  1. 安卓samba软件_Android Samba Client
  2. RS-232串口线与以太网的八芯双绞线的对比,为什么不使用串口线来连接电脑和路由器?
  3. 【Apache】 LXC 容器中重启 Apache 报错: Failed to set up mount namespacing: Permission denied
  4. 4.2.4 磁盘的管理
  5. 第二天学习Java的笔记
  6. 使用命令行对Android应用签名
  7. VS2005 自动生成属性(转)
  8. android mat下载地址,MatLog下载-MatLog(Log获取)下载v1.2.3 安卓版-西西软件下载
  9. [vue-element]ElementUI的穿梭组件如果数据量大会变卡怎么解决不卡的问题呢?
  10. 基于JAVA+SpringMVC+Mybatis+MYSQL的校园订餐系统
  11. oracle 以1开头以9结尾_小学生记叙文写作技巧六——如何把握好文章的开头和结尾呢?...
  12. Nokia5230连接电脑无线上网
  13. 虚拟机安装win10 64/32bit系统
  14. 安大计算机学院汤进,“CCF合肥庐州论坛——认知计算研讨会”成功举办
  15. python列表合并降序排列_python对象列表,根据对象属性以降序排列
  16. 学法医的写代码,学刑侦的做运营……原来阿里人读过那些奇葩专业!
  17. 图像处理-007形态变换(二)
  18. javascript中document用法
  19. 通用网络空间安全技术
  20. 滴滴Logi-KafkaManage安装手册

热门文章

  1. stm32f4 USB项目开发详解
  2. LINUX上基于ASM的ORACLE11的安装
  3. 《畅玩NAS》第3章 ESXI安装OpenMediaVault
  4. 【并联机构工作空间分析系列1】 多个圆/圆环求交 得到重叠部分边界 Matlab程序
  5. 41款非常有创意的卡通图标大全可爱
  6. 完整版第四方Oreo易支付源码+28K易支付源码
  7. 非视线成像:基于飞秒摄影技术
  8. python 水位流量关系曲线_水位流量关系曲线的绘制方法
  9. 算法:用Java实现一个mini布隆过滤器(BloomFilter)
  10. GB2312/GBK编码规则及单片机汉显字库算法