使用VelocityTracker获取在屏幕滑动的速度

Android 使用VelocityTracker来获取滑动速度 android.view.VelocityTracker主要用跟踪触摸屏事件(flinging事件和其他gestures手势事件)的速率。用addMovement(MotionEvent)函数将Motion event加入到VelocityTracker类实例中.你可以使用getXVelocity() 或getXVelocity()获得横向和竖向的速率到速率时,但是使用它们之前请先调用comput... 阅读详情

前言

  在写自定义控件的时候,我们有时候需要根据在屏幕滑动的速度来判断接下来的操作是什么。而Android给我们提供了VelocityTracker这个类来快速得到滑动速度,接下来我就说明该如何使用这个类。

实现

  我们先看一下效果图:


  从效果图中可以看到,在滑动的时候我们可以获取实时的速度,有了这样的速度我们就可以进行自己的操作了。

  我自己自定义了一个View->VelocityView,在这个View里面我实现了滑动的操作,具体就是覆盖onTouchEvent方法,然后对ACTION_MOVE动作进行响应即可,看一下源码。

public class VelocityView extends View{
    private VelocityTracker mTracker;
    private OnTrackerListener mListener;
    public VelocityView(Context context){
        super(context);
    }

    public VelocityView(Context context, AttributeSet attrs){
        super(context, attrs);
    }

    public interface OnTrackerListener{
        void getXSpeed(int speed);
        void getYSpeed(int speed);
    }

    public void setTrackerListener(OnTrackerListener listener){
        mListener = listener;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event){
        getTracker(event);
        switch (event.getAction()){
            case MotionEvent.ACTION_DOWN:
                if(mTracker==null){
                    mTracker = VelocityTracker.obtain();
                }else{
                    mTracker.clear();
                }
                mTracker.addMovement(event);
                break;
            case MotionEvent.ACTION_MOVE:
                mTracker.addMovement(event);
                mTracker.computeCurrentVelocity(1000);
                getSpeed();
                break;
            case MotionEvent.ACTION_UP:
                cancelTracker();
                break;
        }
        return true;
    }

    private void cancelTracker(){
        if(mTracker!=null){
            mTracker.recycle();
            mTracker = null;
        }
    }

    private void getSpeed(){
        mTracker.computeCurrentVelocity(1000);
        int xSpeed = (int)Math.abs(mTracker.getXVelocity());
        int ySpeed = (int)Math.abs(mTracker.getYVelocity());
        if(mListener!=null){
            mListener.getXSpeed(xSpeed);
            mListener.getYSpeed(ySpeed);
        }
    }

    private void getTracker(MotionEvent event){
        if(mTracker==null){
            mTracker = VelocityTracker.obtain();
            mTracker.addMovement(event);
        }
    }
}

  代码也比较简单,主要是用到了下面的几个方法:

  • obtain() 这个方法是静态方法,是用来获取VelocityTracker的一个实例。

  • addMovement(MotionEvent event)将event对象添加到VelocityTracker的实例当中。

  • recycle 回收VelocityTracker的一个实例。

  • computeCurrentVelocity(int units) 该方法用来计算在units毫秒内,运动了多少个像素。如果units值为1000,那么就是在1秒内运动的像素数,也就是速度。

  • computeCurrentVelocity(int units,float maxVelocity) maxVelocity表示速率的最大值,如果设置成200,那么当速度大于200时,返回值为200,速度低于200时则正常返回。

  • getXVelocity 返回在X方向上的速度

  • getYVelocity 返回在Y方向上的速度

小结

  这个类的作用还是挺大的,比如说在做侧滑菜单的时候,我们得到滑动的速度,如果速度大于一定的值,那么我们就显示菜单,否则就不显示,这比获取坐标然后计算差值最后计算速度要方便的多。

【源码下载】

Android获取在屏幕滑动速度的实例 这是android获取在屏幕滑动速度的一个实例,具体请参见我的博客:http://blog.youkuaiyun.com/ProgramChangesWorld/article/details/49130373 立即下载

相关推荐

基于YOLOv5的隧道衬砌缺陷智能检测系统

计算机视觉在工程检测领域正发挥越来越重要的作用,特别是目标检测技术通过深度学习算法实现了对复杂场景的智能分析。YOLOv5作为当前主流的目标检测框架,通过改进网络结构和训练策略,可以显著提升检测精度和效率。在隧道工程领域,结合通道注意力机制和多尺度特征融合技术,能够有效解决衬砌缺陷识别中的小目标检测难题。这种AI检测系统相比传统人工判读地质雷达图像,不仅将效率提升20倍,还能将识别准确率提高到92.3%,特别适用于3cm以上结构缺陷的自动化检测。系统通过深度可分离卷积等优化,实现了模型轻量化,便于在边缘计算

weixin_29064103的博客 326

自定义View 使用VelocityTracker记录滑动速度

1.简介VelocityTracker是android提供的用来记录滑动速度的一个类,可以监控手指移动的速度。

听海的博客 1611

Mplus实战:随机截距交叉滞后模型(RI-CLPM)在心理学纵向研究中的进阶应用

本文深入探讨了随机截距交叉滞后模型(RI-CLPM)在心理学纵向研究中的进阶应用,通过Mplus实战演示了模型设定、结果解读及进阶建模策略。RI-CLPM能有效区分个体间差异和个体内变化,适用于追踪青少年手机使用与抑郁症状等研究。文章还提供了样本量规划、模型比较和结果可视化等实用技巧,助力研究者避免常见陷阱。

weixin_29220405的博客 369

VelocityTracker

VelocityTracker是android提供的用来记录滑动速度的一个类,可以监控手指移动的速度。 基本用法 如果我们想监控一个view内,手指移动的瞬时速度,该如何做?代码如下所示。主要是在onTouchEvent里记录各个MotionEvent,down事件是起点,此时需要初始化mVelocityTracker(obtain或者reset),第一次肯定是obtain。然后把当前的eve

litefish的专栏 4204

Android GWP-Asan机制详解

基本用途:GWP-ASan是一种原生内存分配器功能,在内存分配时额外记录一些信息,用于检测DOUBLE_FREE、USE_AFTER_FREE、INVALID_FREE、BUFFER_OVERFLOW、BUFFER_UNDERFLOW五种内存错误问题。

专注于系统快稳省领域 4145

Proteus仿真实战:基于IIC驱动SSD1306的0.96英寸OLED显示方案解析

本文详细解析了在Proteus仿真环境中基于IIC驱动SSD1306的0.96英寸OLED显示方案。从硬件搭建、IIC接口连接、软件驱动移植到常见问题排查,提供了全面的实战指导,帮助开发者快速实现OLED显示功能并优化性能。

weixin_28724661的博客 770

Android VelocityTracker使用总结

VelocityTracker是一个什么东西呢,查看VelocityTracker源代码发现有如下注释: [html] view plaincopyprint? /**       * Helper for tracking the velocity of touch events, for implementing       * flin

coder_nice的专栏 5396

别再瞎调参数了!用MATLAB fmincon优化傅里叶级数,为你的机器人设计“完美”激励轨迹

本文详细介绍了如何利用MATLAB的fmincon优化器设计机器人激励轨迹,通过优化傅里叶级数参数,解决传统试错法的低效问题。文章涵盖了目标函数设计、约束条件转化及优化算法选择,帮助工程师实现高精度的系统辨识和动力学参数优化。

weixin_42613501的博客 240

TouchEvent事件中的 速度跟踪类----------------VelocityTracker----

zzz:  http://blog.youkuaiyun.com/bingxianwu/article/details/7446799 VelocityTracker顾名思义即速度跟踪,在android中主要应用于touch event, VelocityTracker通过跟踪一连串事件实时计算出 当前的速度,这样的用法在android系统空间中随处可见,比如Gestures中的Fling, Sc

蓝松SDK 1193

基于Simulink的永磁同步电机力位混合控制(导纳+位置)仿真

本文详细介绍了基于Simulink的永磁同步电机(PMSM)力位混合控制系统实现方法。主要内容包括:1) 通过导纳控制原理(二阶质量-阻尼-弹簧模型)实现机器人柔顺控制;2) 在Simulink中构建虚拟环境、导纳控制器、PMSM驱动系统等完整框架;3) 针对曲面恒力打磨场景,实现20N恒力跟踪(RMS误差1.2N)和位置顺应;4) 支持纯位置/导纳/恒力三种工作模式切换;5) 提供系统性能评估指标和高级扩展功能。该方案显著提升了机器人环境交互的安全性和适应性,适用于精密装配、人机协作等应用场景。

xiaoheshang_123的博客 147

把静态前端托管进 SAP BTP:HTML5 Application Deployer 与企业级内容部署全攻略

本文介绍了在SAP BTP Cloud Foundry环境中使用HTML5 Application Repository托管前端静态资源的工程化实践。通过HTML5 Application Deployer工具,结合MTA描述、路由配置和服务实例,实现前后端解耦和标准化部署。文章详细阐述了目录结构、关键配置文件、MTA编排以及构建部署流程,并针对大体积前端资源提供了GACD和异步上传两种解决方案。最后说明了如何与AppRouter协同工作,使部署内容可供终端用户访问。这套方法使前端更新无需重启后端,支持团队

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 155

利用VelocityTracker获取手指在屏幕上的滑动速度

做界面切换的时候研究了一下屏幕对手指滑动速度感应的功能,参考别人写了一个片段验证了一下velocitytracker这个类的功能    废话不多说了,果断先上图:   手指移动后:  接下来是大家期待的代码部分:  布局文件  activity_main: 在这里,我们只定义了一个TextView用来显示等下我们的手指移动的速度,这里我们把它初始化为:hello  wor

wobilini的专栏 8132

18、公开可用的PPG数据库介绍

本文介绍了多个公开可用的PPG(光电容积描记)数据库,包括PPG-BP数据库、MIMIC II波形数据库、运动期间手腕PPG数据库以及指尖PPG与呼吸数据库等。这些数据库提供了丰富的生理信号数据,适用于动脉血压检测、呼吸频率估计、运动干扰去除以及基于PPG的生物特征识别等研究。每个数据库的数据来源、受试者信息、信号特点和下载方式均有详细介绍,并展示了如何利用这些数据库进行信号分析和算法评估。

salt的博客 388

VelocityTracker 使用

这个类的话是用来得到手势在屏幕上滑动的速度,也许我们用的比较少,但是还是在这里写下怎样使用VelocityTracker这个类,         第一步的话,当然是得到该类的一个实例 mVelocityTracker = VelocityTracker.obtain();         第二步,需要告诉mVelocityTracker 这个对象你要对那个MotionEvent 进行监控(也就

455

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

android VelocityTracker用法

在Android开发过程中,有这样一个普遍的需求:用手指滑动一个View,当手离开屏幕后View还能滑动一定的距离。 要完成这样的效果只需两步:1.获取手指离开时的速度。2.使View滚动一定的距离。

civil的专栏 4869

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

android 滑动过程 触发,Android 手指滑动速度识别

速度追踪--VelocityTracker方法摘要public static VelocityTracker obtain()返回一个Velocity对象实例,必须确保调用recycle()当不再使用的时候,这样Velocity对象可以在其他地方使用。Retrieve a new VelocityTracker object to watch the velocity of a motion. B...

weixin_42326020的博客 1005

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android中级——滑动分析

如上,后面的矩形为画布,中间的矩形则为屏幕的可视区域,若调用scrollBy(20,10),则结果为可视区域向右下方移动(而对于Button则是向左上方移动),如下图。如上实现在ACTION_UP时,将控件回归原位,利用Scroller和computeScroll(),通过不断获取当前滚动值,调用scrollTo(),实现平滑移动。基本思想是:当触摸View时记下坐标,当手指移动时记下移动后的坐标,从而获取偏移量修改View的坐标,不断重复实现滑动。可通过如下方式获取控件在视图坐标系的(x, y)坐标。

松仔Log的博客 1141

手指划动切换Activity

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34406061的博客 83

Android 获取控件滑动速度,速度跟踪器VelocityTracker;

VelocityTracker 速度跟踪器 在写关于Android滑动的控件,如果用户手指在屏幕上(当前位置 - 起始位置 > 某个数值)就做一个界面切换,但是总感觉太生硬,只有满足上面的条件才会触发切换界面,不管用户滑动的速度有多么的快,都要去算当前位置和起始位置的距离;但是ViewPager这个控件如果你滑动速度很快的话,就触发切换页面的效果了,怎么实现的呢;于是我去看了一下Googl...

Choi晨的博客 2315

天天记录 - 使用VelocityTracker计算滑动速率

先看看效果图   使用比较简单,直接贴代码 /** * 计算滑动速率 * */ public class VelocityTrackerDemoActivity extends Activity { private static final String INFO = "手指在屏幕上滑动"; private int mMaximumV

Android 3263
上一篇: 源码解析:3D推拉门式滑动菜单
下一篇: 编译原理:词法分析程序
潘建成
博客等级 码龄12年 139粉丝 120原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值