VelocityTracker简单用法
VelocityTracker简单用法
VelocityTracker顾名思义即速度跟踪,在android中主要应用于touch event, VelocityTracker通过跟踪一连串事件实时计算出
当前的速度,这样的用法在android系统空间中随处可见,比如Gestures中的Fling, Scrolling等,下面简单介绍一下用法。
- //获取一个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:
- 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的分页,
VelocityTracker简单用法相关推荐
- 反编译工具jad简单用法
反编译工具jad简单用法 下载地址: [url]http://58.251.57.206/down1?cid=B99584EFA6154A13E5C0B273C3876BD4CC8CE672& ...
- QCustomPlot的简单用法总结
QCustomPlot的简单用法总结 第一部分:QCustomPlot的下载与安装 第二部分:QCustomPlot在VS2013+QT下的使用 QCustomPlot的简单用法总结 写在前面, ...
- python matplotlib 简单用法
python matplotlib 简单用法 具体内容请参考官网 代码 import matplotlib.pyplot as plt import numpy as np # 支持中文 plt.rc ...
- Windump网络命令的简单用法
Windump网络命令的简单用法 大家都知道,unix系统下有个tcpdump的抓包工具,非常好用,是做troubleshooting的好帮手.其实在windows下也有一个类似的工作,叫windum ...
- Android TabLayout(选项卡布局)简单用法实例分析
本文实例讲述了Android TabLayout(选项卡布局)简单用法.分享给大家供大家参考,具体如下: 我们在应用viewpager的时候,经常会使用TabPageIndicator来与其配合.达到 ...
- shell expect的简单用法
为什么需要expect? 我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如 telnet服务器等进 ...
- Shellz中awk的简单用法
其实shell脚本的功能常常被低估.在实际应用中awk sed 等用法可以为shell提供更为强大的功能.下面我们将一下awk调用的简单方法进行了总结.方便同学们学习: awk的简单用法: 第一种调用 ...
- python装饰器实例-Python装饰器原理与简单用法实例分析
本文实例讲述了Python装饰器原理与简单用法.分享给大家供大家参考,具体如下: 今天整理装饰器,内嵌的装饰器.让装饰器带参数等多种形式,非常复杂,让人头疼不已.但是突然间发现了装饰器的奥秘,原来如此 ...
- python装饰器实例-Python装饰器简单用法实例小结
本文总结分析了Python装饰器简单用法.分享给大家供大家参考,具体如下: 装饰器在python中扮演着很重要的作用,例如插入日志等,装饰器可以为添加额外的功能同时又不影响业务函数的功能. 比如,运行 ...
- 【Android 应用开发】Google 官方 EasyPermissions 权限申请库 ( 最简单用法 | 一行代码搞定权限申请 | 推荐用法 )
文章目录 一.添加依赖 二.在 AndroidManifest.xml 中配置权限 三.权限申请最简单用法 四.推荐使用的用法 五.GitHub 地址 上一篇博客 [Android 应用开发]Goog ...
最新文章
- 安卓samba软件_Android Samba Client
- RS-232串口线与以太网的八芯双绞线的对比,为什么不使用串口线来连接电脑和路由器?
- 【Apache】 LXC 容器中重启 Apache 报错: Failed to set up mount namespacing: Permission denied
- 4.2.4 磁盘的管理
- 第二天学习Java的笔记
- 使用命令行对Android应用签名
- VS2005 自动生成属性(转)
- android mat下载地址,MatLog下载-MatLog(Log获取)下载v1.2.3 安卓版-西西软件下载
- [vue-element]ElementUI的穿梭组件如果数据量大会变卡怎么解决不卡的问题呢?
- 基于JAVA+SpringMVC+Mybatis+MYSQL的校园订餐系统
- oracle 以1开头以9结尾_小学生记叙文写作技巧六——如何把握好文章的开头和结尾呢?...
- Nokia5230连接电脑无线上网
- 虚拟机安装win10 64/32bit系统
- 安大计算机学院汤进,“CCF合肥庐州论坛——认知计算研讨会”成功举办
- python列表合并降序排列_python对象列表,根据对象属性以降序排列
- 学法医的写代码,学刑侦的做运营……原来阿里人读过那些奇葩专业!
- 图像处理-007形态变换(二)
- javascript中document用法
- 通用网络空间安全技术
- 滴滴Logi-KafkaManage安装手册