Android官方开发文档Training系列课程中文版:手势处理之记录手指移动的轨迹

原文地址:http://android.xsoftlab.net/training/gestures/movement.html

这节课将会学习如何在触摸事件中记录手指移动的轨迹。

当手指触摸的位置、压力或者尺寸发生变化时,ACTION_MOVE事件就会被触发。与Detecting Common Gestures中描述的一样,所有的事件都被记录在一个MotionEvent对象中。

因为基于手指的触摸并不是很精确的交互方式,所以检测触摸事件的行为需要更多的轨迹点。为了帮助APP区分基于轨迹的手势(比如滑动等移动的手势)与非轨迹手势(比如单点等不移动的手势),Android提出了一个名为”touch slop”的概念。Touch slop指的是用户按下的以像素为单位的距离。

这里有若干项不同的追踪手势轨迹的方法,具体使用哪个方法取决于应用程序的需求:

  • 指针的起始位置与结束位置。
  • 指针位移的方向,由X,Y的坐标判断。
  • 历史记录,你可以通过getHistorySize()获得手势的历史尺寸。然后可以通过getHistorical(Value)方法获得这些历史事件的位置,尺寸,事件以及压力。当渲染手指的轨迹时,比如在屏幕上用手指画线条等,历史记录这时就会派上用场。
  • 指针在屏幕上滑动的速度。

轨迹的速度

在记录手势的特性或者在检查何种手势事件发生时,除了要依靠手指移动的距离、方向这两个要素之外。还需要另外一个非常重要的因素就是速度。为了使速度计算更加容易,Android为此提供了VelocityTracker类以及VelocityTrackerCompat类。VelocityTracker用于辅助记录触摸事件的速度。这对于判断哪个速度是手势的标准部分,比如飞速滑动。

下面的例子用于演示在VelocityTracker API中方法的目的:

public class MainActivity extends Activity {private static final String DEBUG_TAG = "Velocity";...private VelocityTracker mVelocityTracker = null;@Overridepublic boolean onTouchEvent(MotionEvent event) {int index = event.getActionIndex();int action = event.getActionMasked();int pointerId = event.getPointerId(index);switch(action) {case MotionEvent.ACTION_DOWN:if(mVelocityTracker == null) {// Retrieve a new VelocityTracker object to watch the velocity of a motion.mVelocityTracker = VelocityTracker.obtain();}else {// Reset the velocity tracker back to its initial state.mVelocityTracker.clear();}// Add a user's movement to the tracker.mVelocityTracker.addMovement(event);break;case MotionEvent.ACTION_MOVE:mVelocityTracker.addMovement(event);// When you want to determine the velocity, call // computeCurrentVelocity(). Then call getXVelocity() // and getYVelocity() to retrieve the velocity for each pointer ID. mVelocityTracker.computeCurrentVelocity(1000);// Log velocity of pixels per second// Best practice to use VelocityTrackerCompat where possible.Log.d("", "X velocity: " + VelocityTrackerCompat.getXVelocity(mVelocityTracker, pointerId));Log.d("", "Y velocity: " + VelocityTrackerCompat.getYVelocity(mVelocityTracker,pointerId));break;case MotionEvent.ACTION_UP:case MotionEvent.ACTION_CANCEL:// Return a VelocityTracker object back to be re-used by others.mVelocityTracker.recycle();break;}return true;}

Note: 注意,应当在ACTION_MOVE事件内部计算速度,不要在ACTION_UP内部计算,因为在ACTION_UP内部计算所得到的X与Y的速度值都是0.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/478941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

我删掉了Transformer中的这几层…性能反而变好了?

文 | chaos编 | 小轶基于Transformer结构的各类语言模型(Bert基于其encoder,Gpt-2基于其decoder)早已经在各类NLP任务上大放异彩,面对让人眼花缭乱的transformer堆叠方式,你是否也会感到迷茫?没关系,现在让…

LeetCode 821. 字符的最短距离

1. 题目 给定一个字符串 S 和一个字符 C。返回一个代表字符串 S 中每个字符到字符串 S 中的字符 C 的最短距离的数组。 示例 1:输入: S "loveleetcode", C e 输出: [3, 2, 1, 0, 1, 0, 0, 1, 2, 2, 1, 0]来源:力扣(LeetCode) 链…

pdf各种处理 PDF 的实用代码:PyPDF2、PDFMiner、pdfplumber

你不懂得安排自己的人生,会有很多人帮你安排,他们需要你做的事。 PDF文件我们经常用,尤其是这两个场景: 下载参考资料,如各类报告、文档 分享只读资料,方便传播同时保留源文件 场景和模块 所以&#xff0…

论文浅尝 - ESWC2020 | ESBM:一个面向实体摘要的评测集

本文转载自公众号:南大Websoft。实体摘要(Entity Summarization),是知识图谱研究与应用中的一个关键问题。南京大学Websoft团队为此制作了一个评测集,称作ESBM,是目前可以公开获取的规模最大的评测集。这项…

Android官方开发文档Training系列课程中文版:手势处理之滚动动画及Scroller

原文地址:http://android.xsoftlab.net/training/gestures/scroll.html 在Android中,滑动经常由ScrollView类来实现。任何超出容器边界的布局都应该将自己内嵌在ScrollView中,以便提供可滚动的视图效果。自定义滚动只有在特定的场景下才会被…

美团在O2O场景下的广告营销

美团作为中国最大的在线本地生活服务平台,覆盖了餐饮、酒店、旅行、休闲娱乐、外卖配送等方方面面生活场景,连接了数亿用户和数百万商户。如何帮助本地商户开展在线营销,使得他们能快速有效地触达目标用户群体提升经营效率,是美团…

LeetCode 202. 快乐数(快慢指针)

1. 题目 2. 解题 一个数经过若干次各位数平方和后,会等于它自己使用类似环形链表的快慢指针法,最终快慢指针相遇,若不为1则是不快乐数 class Solution { public:int bitSquareSum(int n) {int sum 0, bit;while(n > 0){bit n % 10;su…

全栈深度学习第4期: 机器学习岗位区别与团队管理

一起追剧鸭简介Berkeley全栈深度学习追剧计划是由夕小瑶的卖萌屋发起的优质公开课打卡项目,通过微信群为同期追剧的小伙伴提供交流平台。关于该计划的详请见这里。Berkeley深度学习追剧群目前已有1000小伙伴加入,公众号后台回复口令 深度学习追剧 入群。…

会议交流 | DataFunCon 线上大会 - 知识图谱专题论坛

OpenKG开放知识图谱(简称 OpenKG)旨在促进中文知识图谱数据的开放与互联,促进知识图谱和语义技术的普及和广泛应用。点击阅读原文,进入 OpenKG 博客。

Android官方开发文档Training系列课程中文版:手势处理之多点触控处理

原文地址:http://android.xsoftlab.net/training/gestures/multi.html 多点触控是指多个手指同时触摸屏幕的情况。这节课主要学习如何检测多点触控手势。 记录多个触控点 当多根手指同时触碰到屏幕时,系统会产生以下触摸事件: ACTION_DOW…

我国政务大数据政策的文本分析:推进逻辑与未来进路

原文地址:https://www.sohu.com/a/238844423_99983415 摘要:[目的/意义]从已颁布政策文件中找出我国推进政务大数据发展和应用的内在逻辑, 为优化未来的政策路径提供对策建议。[方法/过程]通过政府门户网站收集189条有效政策文本, 综合运用词频分析软件…

Flutter原理与实践

Flutter是Google开发的一套全新的跨平台、开源UI框架,支持iOS、Android系统开发,并且是未来新操作系统Fuchsia的默认开发套件。自从2017年5月发布第一个版本以来,目前Flutter已经发布了近60个版本,并且在2018年5月发布了第一个“R…

LeetCode 522. 最长特殊序列 II

1. 题目 给定字符串列表,你需要从它们中找出最长的特殊序列。 最长特殊序列定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列)。 子序列可以通过删去字符串中的某些字符实现,但不能改变剩余字…

论文浅尝 - 计算机工程 | 大规模企业级知识图谱实践综述

本文转载自公众号:计算机工程。大规模企业级知识图谱实践综述王昊奋, 丁军, 胡芳槐, 王鑫中文摘要:近年来,知识图谱及其相关技术得到快速发展,并被广泛应用于工业界各种认知智能场景中。在简述知识图谱相关研究的基础上&#xff0…

python实现拆分、合并、删除pdf

PDF(Portable Document Format),中文名称便携文档格式是我们经常会接触到的一种文件格式,文献、文档…很多都是PDF格式。它以格式稳定的优势,使得我们在打印、分享、传输过程中能够最优的保持原有色彩和格式。PDF是以P…

Android官方开发文档Training系列课程中文版:手势处理之拖拽或缩放

原文地址:https://developer.android.com/training/gestures/scale.html 这节课主要学习如何使用触摸手势来拖动、放大屏幕上的对象。 拖动对象 如果你的重点在Android 3.0以上的版本,那么你可以使用内置的拖拽事件监听器View.OnDragListener。 触摸手…

2021年了,对话系统凉透了吗?

文 | 兔子酱编 | 夕小瑶大家好,我是可盐可甜的兔子酱,一枚卖萌屋的资深潜水小编,今天终于有了自己的第一篇文章,希望耗时一周撰写的本文能让大家有所收获~这篇文章,算是对自己在头部大厂2年算法岗炼丹经历的一个经验浓…

前端可用性保障实践

本文基于已发表在Infoq的“美团收银台前端可用性保障实践”一文编辑而成。 一般可用性都是说后端服务的可用性,都说我们的服务可用性到了几个9,很少有人把可用性放到前端来。其实对于任何一个有UI交互流程的业务,都会有前端服务可用性&#x…

LeetCode 762. 二进制表示中质数个计算置位

1. 题目 给定两个整数 L 和 R ,找到闭区间 [L, R] 范围内,计算置位位数为质数的整数个数。 (注意,计算置位代表二进制表示中1的个数。例如 21 的二进制表示 10101 有 3 个计算置位。还有,1 不是质数。) …

报名通道开启 | 顶会 ICLR 2021:医疗对话生成与自动诊断国际竞赛,邀你来战!...

ICLR,2013 年由深度学习三巨头中的Yoshua Bengio 和 Yann LeCun 牵头创办,已受到研究者和开发者的广泛认可,是当之无愧的深度学习领域顶级会议。今年,由中山大学、加利福尼亚大学圣迭戈分校和腾讯天衍实验室等组织联合举办的医疗对…