概述

我们都知道安卓手机的事件分为两类,一类是按键事件,另一类就是屏幕滑动事件,而我们大部分的事件都是通过屏幕滑动来产生的。在滑动的过程中你有没有想过要求一下手指在屏幕上滑动的速度呢!我们可以在滑动事件产生的时候去获取到滑动的事件,然后建立一个算法去计算手指的滑动速度,这显得有点复杂,需要数学功底,还有多线程,以及时间的控制。今天我们将为大家介绍一种简单的实现方法—-速度跟踪(VelocityTracker)

关键代码:
由于VelocityTracker的构造方法是private的,因此我们只能使用obain()去获得一个实例

VelocityTracker mVelocityTracker = VelocityTracker.obtain();

然后为mVelocityTracker传入MotionEvent事件

mVelocityTracker.addMovement(event);

接着我们要设置我们获取的速度是从哪个时间到现在的,如果设置为1000就是1秒前到现在,手指的平均滑动速度,得到的值是以像素计的,单位pix/s

mVelocityTracker.computeCurrentVelocity(1000);

最后我们就可以获取我们设置的这段时间内最新的平均速度了

float vx = mVelocityTracker.getXVelocity();
float vy = mVelocityTracker.getYVelocity();

源码实现:
我们要写一个Activity去显示View
VelocityTrackerActivity.java

package com.fht.ada.view;import com.fht.ada.R;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.VelocityTracker;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.TextView;public class VelocityTrackerActivity extends Activity {private static final String TAG="VelocityTracker";private TextView mShowVelocity;private CustomView mCustomView;private VelocityTracker mVelocityTracker;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);this.setContentView(R.layout.activity_velocity_tracker);mShowVelocity = (TextView) this.findViewById(R.id.show_velocity);mCustomView = (CustomView) this.findViewById(R.id.custom_view);mVelocityTracker = VelocityTracker.obtain();mCustomView.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {//计算速度mVelocityTracker.addMovement(event);mVelocityTracker.computeCurrentVelocity(1000);float vx = mVelocityTracker.getXVelocity();float vy = mVelocityTracker.getYVelocity();Log.i(TAG, vx+"   "+vy);mShowVelocity.setText("vx : "+vx+"\nvy : "+vy);//存储数据,让CustomView进行绘制mCustomView.data.add(event.getX());mCustomView.data.add(event.getY());if (mCustomView.data.size() > 100) {mCustomView.data.remove(0);mCustomView.data.remove(0);}mCustomView.invalidate();return true;}});}
}

Activity的布局
activity_velocity_tracker.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical" ><TextView
        android:id="@+id/show_velocity"android:layout_width="match_parent"android:layout_height="wrap_content" /><com.fht.ada.view.CustomView
        android:id="@+id/custom_view"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>

自定义一个View,它用来绘制出我们我们的手指在屏幕上面运动的轨迹
CustomView.java

package com.fht.ada.view;import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;/*** 使用VelocityTracker计算手指滑动速度,并且绘制运动轨迹* * @author Fht**/
public class CustomView extends View {private static final String TAG = "VelocityTracker";public List<Float> data = new ArrayList<Float>();Paint mPaint = new Paint();public CustomView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}public CustomView(Context context, AttributeSet attrs) {super(context, attrs);mPaint.setColor(0xffed1941);mPaint.setTextSize(10);}public CustomView(Context context) {super(context);}@Overrideprotected void onDraw(Canvas canvas) {Log.i(TAG, "onDraw(Canvas canvas");float pts[] = new float[data.size()];for (int i = 0; i < pts.length; i++) {pts[i] = data.get(i);}canvas.drawLines(pts, mPaint);}}

至此,我们的代码就写完了

源码下载

速度追踪--VelocityTracker相关推荐

  1. Android VelocityTracker 滑动速度追踪

    前言 应用开发过程中,会有类似这样的需求,检测手指滑动距离或在某一个方向的滑动速度,当滑动距离或在某一个方向的滑动速度达到临界值时,将 View 消失或进行其他的业务逻辑处理. 滑动距离通过记录 do ...

  2. 关于Android滑动scroll,弹性滑动以及VelocityTracker

    一 VelocityTracker 速度追踪,手指在滑动中的速度,包括水平和竖直方向. 计算公式: 速度 =(终点位置-起点位置)/ 时间段 使用: VelocityTracker velocityT ...

  3. Android VelocityTracker使用总结

    VelocityTracker是一个什么东西呢,查看VelocityTracker源代码发现有如下注释: [html]  view plain copy print ? /** * Helper fo ...

  4. 第3章 View的事件体系

    一.View基础 View的位置参数: 参数:top,left,right,bottom x,y,translationX,translationY(android3.0之后) 四个顶点确定:top( ...

  5. Android自定义View,滑动,事件传递小结

    本文只总结知识点 欢迎补充,欢迎纠正.谢谢! #预备知识 Android控件框架 ####1. View树状图 Android的View树结构总是以一个ViewGroup开始,包含多个View或Vie ...

  6. 【转】android手势处理揭秘

    当滑动(fling)比移动(scroll)有更高的效率时,为什么要让用户使用scroll操作呢?在面积很小而数据又很多的移动设备上,要显示远在后面的那些内容scroll是很困难的,这种情况下fling ...

  7. Android ListView侧滑item,仿QQ删除效果

    尊重原创,转载请注明(http://blog.csdn.net/aoshiwenrou/article/details/42971193) 最近的项目需求有一条是要实现仿QQ的侧滑删除效果,网上搜到了 ...

  8. Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果

    本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/17539199) 我在上一篇文章中Android 带你从源码的角度解析 ...

  9. 《Android艺术开发探索》学习笔记之View的事件体系(一)

    View View是Android中所有控件的基类,即使是ViewGroup也是继承View,也就是说View本身就可以是单个控件也可以是多个控件组成的一组控件,通过这种关系形成了View的结构. V ...

最新文章

  1. 【Python】self是干啥的?
  2. zabbix客户端一键安装脚本(主动模式监控)
  3. P4070-[SDOI2016]生成魔咒【SA,平衡树】
  4. 提前批无笔试,3天后截止!!字节跳动智能创作实验室-图像团队2022秋招提前批投递...
  5. 阿里巴巴发布第四财季财报 菜鸟驿站包裹量增长100%
  6. 嵌入式操作系统内核原理和开发(cpu的那些事)
  7. 融合连接-玄武科技助力“智慧政务”新时代 —— 玄武科技 即信产品市场总监 朱敏...
  8. COJ 1079 树上的查询 (离线LCA)
  9. python定时导出已发送文件_python定时发送数据库备份文件到邮箱
  10. 万稞pw80线切割编程软件_线切割的老司机们,你们知道绘图编程软件AUTOP是怎么来的吗?...
  11. java返回语句_Java中return的语句
  12. 自己整理的Linux指令全集,附思维导图(适合刚入门的看),顺带命令大全网址方便查找指令
  13. Python+uiautomation 查找微信僵尸粉
  14. MBR分区表详解(SD卡)
  15. 【HW2020漏洞回顾】深信服EDR两大漏洞(转载)
  16. 2020十大科技趋势展望
  17. 适配器模式(Adapter)
  18. 数组排序之后相邻数的最大差值
  19. 网络电话免费打 【推荐】
  20. 【山外笔记-计算机网络·第7版】第10章:计算机网络重要概念

热门文章

  1. [转]注册给排水工程师考试科目及内容
  2. 解决.tiff文件转.pcd文件滤波后转回.tiff文件点的序列被打乱的问题
  3. 【转】win10录屏快捷键报错显示需要新应用打开ms-gamingoverlay
  4. Excel如何按照月份汇总销售量
  5. 解决Oracle中文乱码问题
  6. Windows电脑如何滑动关机(Slide To Shut Down)
  7. 信息技术教案计算机知识产权,[中学联盟]云南省罗平县第一中学高一《信息技术基础》参考教案:信息技术对人类社会的影响及知识产权 (2份打包)...
  8. Python中如何获取用户的输入,你一定要知道,学Python必看
  9. 利用opencv识别路标
  10. 悄悄分享 60 个相见恨晚的神器工具