Pro Android学习笔记(一四三):触摸屏(2):VelocityTracker

2024-01-28 12:08

本文主要是介绍Pro Android学习笔记(一四三):触摸屏(2):VelocityTracker,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章转载只能用于非商业性质,且不能带有虚拟货币、积分、注册等附加条件。转载须注明出处http://blog.csdn.net/flowingflying/以及作者@恺风Wei。


利用MotionEvent,我们可以获知手指在屏幕滑过的速度,因为可以或者位置,间隔时间。Android提供了VelocityTracker类,必须自己计算,可以直接获取。Velocity实际也是从MotionEvent中获取信息。

下面是一个例子,小例子很简单,一个LinearLayout,上面有一个TextView,用于显示速度信息。

例子代码如下:

public class TestVelocityActivity extends Activity{ 
    private TextView textView = null; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.test_velocity_activity); 
        textView = (TextView)findViewById(R.id.vt_text); 
    }
 

    private VelocityTracker vt = null;      
    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
        switch(event.getAction()){ 
        case MotionEvent.ACTION_DOWN: 
           //【1.1】通过静态消息VelocityTracker.obtain()获取对象
            if(vt == null){ 
                vt = VelocityTracker.obtain(); 
            }else{ 
                //【1.2】对于重用的vt,清空,回复初始状态 
                vt.clear(); 
            } 
            //【2】加入MotionEvent信息,这是获取的第一个event信息,速度为0。
            vt.addMovement(event); 
            break; 
            
        case MotionEvent.ACTION_MOVE: 
            //【2】加入MotionEvent的信息,获得第二个event信息,就可以有效计算速度
            vt.addMovement(event); 
            //【3】设置计算速度的单位 pixel/unit,unit为1,单位为pixels/ms,我们设置为1000,速度单位为pixels/s
            vt.computeCurrentVelocity(1000); //1秒1 pixel 
            //【4】获取X方向和Y方向的速度,在调用getX|YVelocity()之前必须先执行computeCurrentVelocity()。
            textView.setText( "X速率为" + vt.getXVelocity()+ ",Y速度为" + vt.getYVelocity());
            break; 
            
        case MotionEvent.ACTION_UP: 
        case MotionEvent.ACTION_CANCEL:
 
            /* 【5】回收,其他人可以用,我们将用在下一个动作。此外,我们不在ACTION_UP的时候计算,因为此时速度为0。
             * 如果我们在游戏中计算抛投物体的速度,通常是ACTION_MOVE的最后速度,不要在ACTION_UP中计算。 
             * VelocityTracker是比较费资源的,因此当我们不需要的使用就应该recycle(),运行其他人使用,虽然 
             * Android允许多个VelocityTracker,但这会消耗大量内存,因此不同应recycle(),并重复使用 */  
                vt.recycle();            
            break; 
            
        default: 
            break; 
        } 
        return super.onTouchEvent(event); 
    } 

}

 

相关小例子代码:Pro Android学习:touch screen小例子

这篇关于Pro Android学习笔记(一四三):触摸屏(2):VelocityTracker的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/653590

相关文章

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

升级至三频BE12000! 华硕ROG魔盒Pro路由器首发拆解评测

《升级至三频BE12000!华硕ROG魔盒Pro路由器首发拆解评测》华硕前两天推出新一代电竞无线路由器——ROG魔盒Pro(StrixGR7Pro),该产品在无线规格、硬件配置及功能设计上实现全... 作为路由器行业的T1梯队厂商,华硕近期发布了新旗舰华硕ROG魔盒Pro,除了保留DIY属性以外,高达120

三频BE12000国补到手2549元! ROG 魔盒Pro WIFI7电竞AI路由器上架

《三频BE12000国补到手2549元!ROG魔盒ProWIFI7电竞AI路由器上架》近日,华硕带来了ROG魔盒ProWIFI7电竞AI路由器(ROGSTRIXGR7Pro),目前新... 华硕推出了ROG 魔盒Pro WIFI7电竞AI路由器(ROG STRIX GR7 Phttp://www.cppcn

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

Android DataBinding 与 MVVM使用详解

《AndroidDataBinding与MVVM使用详解》本文介绍AndroidDataBinding库,其通过绑定UI组件与数据源实现自动更新,支持双向绑定和逻辑运算,减少模板代码,结合MV... 目录一、DataBinding 核心概念二、配置与基础使用1. 启用 DataBinding 2. 基础布局