Android : 使用GestureOverlayView进行手势识别—简单应用

示例图:

GestureOverlayView介绍:

GestureOverlayView 是 Android 开发中用于识别和显示手势的视图组件。它允许用户在屏幕上绘制手势,并且应用程序可以检测和响应这些手势。以下是关于 GestureOverlayView 的主要特点:

  1. 手势识别GestureOverlayView 可以识别并跟踪用户在屏幕上绘制的手势。这意味着用户可以在屏幕上自由绘制,而 GestureOverlayView 会捕捉并分析这些动作。
  2. 手势识别器:为了能够识别和处理手势,你需要一个 GestureDetector。这个识别器会分析 GestureOverlayView 捕获的手势数据,并将可识别的手势传递给应用程序。
  3. 手势显示GestureOverlayView 还可以在用户绘制手势时显示一个可视化的指示器,这有助于用户了解他们正在创建的手势。
  4. 自定义手势:你可以定义自己的手势,并使用 GestureDetector 识别它们。这意味着你可以创建特定于你的应用程序的手势,如自定义的绘画动作或特殊的命令手势。
  5. 触摸事件GestureOverlayView 还提供了一种机制,可以让你在用户与视图交互时获取触摸事件。这使得你可以在用户绘制手势时执行其他操作,例如更改视图或响应用户的输入。
  6. 集成与使用:要使用 GestureOverlayView,你需要在 XML 布局文件中将其添加到你的界面,并在 Java 或 Kotlin 代码中配置和初始化它。你还需要设置一个 GestureDetector 来处理识别到的手势。

总的来说,GestureOverlayView 是一个强大的工具,允许你在 Android 应用中实现手势识别功能。通过结合 GestureDetector 和自定义逻辑,你可以创建出高度交互和直观的用户界面。

使用 GestureOverlayView,你需要遵循以下步骤:

  1. 布局文件定义:在 XML 布局文件中添加 <android.gesture.GestureOverlayView> 标签。设置必要的属性,如 gestureColoruncertainGestureColor 和 gestureStrokeWidth
  2. 生成手势文件:使用 Gestures Builder(一个 SDK 中的示例项目)来生成手势文件。创建一个新的项目,然后运行它,将会生成手势文件。将这些文件导出并复制到你的项目中的 res/raw 目录下。
  3. 加载手势文件:在后台代码中,加载生成的手势文件。这通常涉及到读取 res/raw 目录下的文件。
  4. 识别和匹配手势:使用 GestureOverlayView 进行手势识别。这通常涉及到加载手势文件中的手势,并使用 GestureDetector 进行识别和匹配。
  5. 处理识别到的手势:当识别到手势时,你可以执行相应的操作。例如,你可以在用户绘制特定手势时触发特定的功能或操作。
  6. 集成与使用:在 Java 或 Kotlin 代码中,初始化 GestureOverlayView 并设置一个 GestureDetector 来处理识别到的手势。确保正确处理触摸事件和视图更新。
  7. 自定义手势:如果你需要自定义的手势,你可以定义它们并通过 GestureDetector 进行识别。这可能涉及到创建自定义的手势文件和编写相应的逻辑来处理这些手势。

请注意,使用 GestureOverlayView 需要一定的 Android 开发经验,特别是对于触摸事件和视图组件的处理。确保熟悉 Android 开发文档和相关的 API 指南,以便更好地利用这个功能强大的组件。

APi:GestureOverlayView  |  Android Developers (google.cn)

生成手势文件: google Play 商店下载app 搜索: Gestures Builder   

下载后 添加手势:

找到手势文件粘贴到项目内:

目录:        Android/data/migueldp.runeforge/files/gestures.txt

创建文件目录 raw:         res  ->  new -> Directory  -> raw           把文件放在该目录下

布局文件:activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><!--当手势已经被识别出来时,是否拦截该手势动作android:eventsInterceptionEnabled="true"当用户画完 手势效果 淡出的时间android:fadeDuration="1000"当用户画完之后 手势是否自动淡出android:fadeEnabled="true"手势画笔颜色android:gestureColor="#fff00f"手势画笔样式android:gestureStrokeType="single"手势画笔粗细android:gestureStrokeWidth="20"--><!-- 1. 布局文件定义 --><android.gesture.GestureOverlayViewandroid:id="@+id/gestureOverlayView"android:layout_width="wrap_content"android:layout_height="match_parent"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"><TextViewandroid:id="@+id/textView"android:layout_width="300dp"android:layout_height="500dp"android:background="#FF5722"android:gravity="center"android:textSize="24sp"android:text="TextView"app:layout_constraintBottom_toBottomOf="parent"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /></android.gesture.GestureOverlayView></androidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java

package com.example.mygestureoverlayviewdemo;import android.annotation.SuppressLint;
import android.gesture.Gesture;
import android.gesture.GestureLibraries;
import android.gesture.GestureLibrary;
import android.gesture.GestureOverlayView;
import android.gesture.Prediction;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;import androidx.appcompat.app.AppCompatActivity;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {private TextView textView;private GestureOverlayView mGestureOverlayView;@SuppressLint("ClickableViewAccessibility")@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView = findViewById(R.id.textView);mGestureOverlayView = findViewById(R.id.gestureOverlayView);//2.加载手势文件      找到文件 创建raw目录 把手势文件放在该目录下GestureLibrary mGestureLibrary= GestureLibraries.fromRawResource(this,R.raw.gestures);mGestureLibrary.load();/*** GestureOverlayView 事件监听器* interface	GestureOverlayView.OnGestureListener 手势监听器* interface	GestureOverlayView.OnGesturePerformedListener   手势执行监听器* interface	GestureOverlayView.OnGesturingListener  手势执行中监听器**/mGestureOverlayView.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {@Overridepublic void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {//3.识别和匹配手势ArrayList<Prediction> predictionArrayList = mGestureLibrary.recognize(gesture);Prediction prediction = predictionArrayList.get(0);//校验 相似度 越小越模糊 匹配度越高if(prediction.score >= 3.0){//4.处理识别到的手势 根据名字匹配if(prediction.name.equals("exit"))  finish(); //退出程序if (prediction.name.equals("下一个")) textView.setText("下一个,模拟操作下一个");if (prediction.name.equals("星星")) textView.setText("星星,kwwl");if (prediction.name.equals("roundSave")){textView.setText("画了一个圈,模拟操作保存");Toast.makeText(MainActivity.this,"圈圈保存",Toast.LENGTH_SHORT).show();}}else {Toast.makeText(MainActivity.this,"没有匹配到手势!",Toast.LENGTH_SHORT).show();}}});}}

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

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

相关文章

nodejs+vue+微信小程序+python+PHP特困救助供养信息管理系统-计算机毕业设计推荐

通过走访某特困救助供养机构实际情况&#xff0c;整理特困救助供养机构管理的业务流程&#xff0c;分析当前特困救助供养机构管理存在的各种问题&#xff0c;利用软件开发思想对特困救助供养机构特困救助供养机构管理进行系统设计分析。通过服务端程序框架进行设计&#xff0c;…

MFC - 给系统菜单(About Dialog)发消息

文章目录 MFC - 给系统菜单(About Dialog)发消息概述笔记resource.h菜单的建立菜单项的处理MSDN上关于系统菜单项值的说法END MFC - 给系统菜单(About Dialog)发消息 概述 做了一个对话框程序, 在系统菜单(在程序上面的标题栏右击)中有"关于"的菜单. 这个是程序框架…

【MySQL】事务Transaction

1. 事务的概念 事务是什么 在业务逻辑中使用sql&#xff0c;面对一些较复杂的场景&#xff0c;是需要多个sql语句组合起来实现的。如&#xff1a;银行的转账业务&#xff0c;若客户A要转账100元给客户B&#xff0c;就要两条sql&#xff1a;A余额减100&#xff0c;B余额加100&a…

ES6语法(五)封装模块化公共工具函数、引入npm包 ,并上传到npm中进行下载

1. 模块化 模块化是指将一个大的程序文件&#xff0c;拆分为许多小的文件&#xff08;模块&#xff09;&#xff0c;然后将小的文件组合起来。 1.1. 优点 &#xff08;1&#xff09;防止命名冲突 &#xff08;2&#xff09;代码复用 &#xff08;3&#xff09;高维护性 &…

【CFP-专栏2】计算机类SCI优质期刊汇总(含IEEE/Top)

一、计算机区块链类SCI-IEEE 【期刊概况】IF:4.0-5.0, JCR2区&#xff0c;中科院2区&#xff1b; 【大类学科】计算机科学&#xff1b; 【检索情况】SCI在检&#xff1b; 【录用周期】3-5个月左右录用&#xff1b; 【截稿时间】12.31截稿&#xff1b; 【接收领域】区块链…

利用idea+ jclasslib插件查看和分析 Java 类文件的字节码

jclasslib介绍 jclasslib 插件是一个用于 IntelliJ IDEA 的工具&#xff0c;它允许开发者在集成开发环境&#xff08;IDE&#xff09;内直接查看和分析 Java 类文件的字节码。这个插件尤其对于想要深入了解 Java 字节码、类加载机制、以及 Java 虚拟机&#xff08;JVM&#xf…

网络基础操作练习

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 手把手教你操作华为设备&#xff0c;新手必看。 实验拓扑图 关于命令行视图 1&#xff09;用户视图 <Huawei> 2&#xff09;系统视图 [Hu…

C++初阶(类中的默认成员函数)

呀哈喽&#xff0c;我是结衣 今天给大家带来的是类里面的默认成员函数&#xff0c;一共有六个默认的成员函数哦&#xff0c;包括构造函数&#xff0c;析构函数&#xff0c;拷贝构造函数&#xff0c;运算符重载函数&#xff0c;const成员函数&#xff0c;那么正篇开始。 文章目…

Go语言中的性能考虑和优化

优化您的Go代码以达到最佳性能 性能优化是软件开发的关键方面&#xff0c;无论您使用哪种编程语言。在这篇文章中&#xff0c;我们将探讨Go语言中的性能考虑和优化&#xff0c;Go是一种以其效率而著称的静态类型和编译语言。我们将深入探讨三个关键领域&#xff1a;分析并发代…

pytorch01:概念、张量操作、线性回归与逻辑回归

目录 一、pytorch介绍1.1pytorch简介1.2发展历史1.3pytorch优点 二、张量简介与创建2.1什么是张量&#xff1f;2.2Tensor与Variable2.3张量的创建2.3.1 直接创建torch.tensor()2.3.2 从numpy创建tensor 2.4根据数值创建2.4.1 torch.zeros()2.4.2 torch.zeros_like()2.4.3 torch…

开源可观测性平台Signoz(四)【链路监控及数据库中间件监控篇】

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 前文链接&#xff1a; ​​开源可观测性平台Signoz系列&#xff08;一&#xff09;【开篇】​​ ​​开源可观测性平台Signoz&…

CSS之元素转换

我想大家在写代码时有一个疑问&#xff0c;块级元素可以转换成其他元素吗&#xff1f; 让我为大家介绍一下元素转换 1.display:block(转换成块元素) display&#xff1a;block可以把我们的行内元素或者行内块元素转换成块元素 接下来让我为大家演示一下&#xff1a; <!DO…

tcpdump出现permission denied

在使用tcpdump -i eth0 src host 192.168.0.184 and ip and port 22 -nn -w ping.pacp命令抓包并把抓到的数据保存到ping.pacp时&#xff0c;出现了权限错误的报错。但实际上我这里用的是root用户执行的命令。 查阅man手册发现: 在tcpdump中&#xff0c;-Z选项用于在启动数据…

CSS 动态提示框

​​ <template> <div class"terminal-loader"><div class"terminal-header"><div class"terminal-title">提示框</div><div class"terminal-controls"><div class"control close"…

【Matlab】BP 神经网络时序预测算法

资源下载&#xff1a; https://download.csdn.net/download/vvoennvv/88681507 一&#xff0c;概述 BP 神经网络是一种常见的人工神经网络&#xff0c;也是一种有监督学习的神经网络。其全称为“Back Propagation”&#xff0c;即反向传播算法。BP 神经网络主要由输入层、隐藏层…

SpringValidation自定义注解以及分组校验

SpringValidation的参数校验使用可参考&#xff1a;【SpringMVC应用篇】Spring Validation 参数校验-CSDN博客 目录 1. 引入依赖 2. 自定义注解校验 2.1 创建Validation类 2.2 创建注解对象 2.3 使用注解 3. 分组校验 3.1 实体类内部定义接口 3.2 在参数上指定分组 1. …

git回滚操作,常用场景

文章目录 git回滚操作1.git reset --hard 【版本号】2.回滚后的版本v2又想回到之前的版本v32.1 git reflog 3.git checkout -- 文件名4.git reset HEAD 文件名 git回滚操作 假设我们现在有三个版本 现在回滚一个版本 1.git reset --hard 【版本号】 发现只剩下两个版本了 2.…

51单片机的中断相关知识

51单片机的中断相关知识点 一、中断概念和功能 概念 程序执行过程中CPU会遇到一些特殊情况&#xff0c;是正在执行的程序被“中断”&#xff0c;cpu中止原来正在执行的程序&#xff0c;转到处理异常情况或特殊事件的程序去执行&#xff0c;结束后再返回到原被中止的程序处(断…

计算机网络——计算大题(七)

前言&#xff1a; 最近也是在准备计算机考试&#xff0c;我们的考试形式是上机考试&#xff0c;所以可能有些计算题是会给提供思路的&#xff0c;前面已经对本学期的计算机网络知识有了一个简单的认识与了解&#xff0c;现在我们就来对计算大题进行一个学习吧&#xff0c;这里的…

中医电子处方系统,西医个体诊所门诊卫生室病历记录查询软件教程

中医电子处方系统&#xff0c;西医个体诊所门诊卫生室病历记录查询软件教程 一、软件程序问答 1、电子处方软件如何快速开单&#xff1f; 如下图&#xff0c;软件以 佳易王诊所电子处方管理系统V17.1版本为例说明 在开电子处方的时候可以按单个药品开&#xff0c;也可以直…