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

本文主要是介绍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();}}});}}

这篇关于Android : 使用GestureOverlayView进行手势识别—简单应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

SpringBoot中使用Flux实现流式返回的方法小结

《SpringBoot中使用Flux实现流式返回的方法小结》文章介绍流式返回(StreamingResponse)在SpringBoot中通过Flux实现,优势包括提升用户体验、降低内存消耗、支持长连... 目录背景流式返回的核心概念与优势1. 提升用户体验2. 降低内存消耗3. 支持长连接与实时通信在Sp

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

python使用库爬取m3u8文件的示例

《python使用库爬取m3u8文件的示例》本文主要介绍了python使用库爬取m3u8文件的示例,可以使用requests、m3u8、ffmpeg等库,实现获取、解析、下载视频片段并合并等步骤,具有... 目录一、准备工作二、获取m3u8文件内容三、解析m3u8文件四、下载视频片段五、合并视频片段六、错误

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

gitlab安装及邮箱配置和常用使用方式

《gitlab安装及邮箱配置和常用使用方式》:本文主要介绍gitlab安装及邮箱配置和常用使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.安装GitLab2.配置GitLab邮件服务3.GitLab的账号注册邮箱验证及其分组4.gitlab分支和标签的

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

nginx启动命令和默认配置文件的使用

《nginx启动命令和默认配置文件的使用》:本文主要介绍nginx启动命令和默认配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录常见命令nginx.conf配置文件location匹配规则图片服务器总结常见命令# 默认配置文件启动./nginx

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

Windows下C++使用SQLitede的操作过程

《Windows下C++使用SQLitede的操作过程》本文介绍了Windows下C++使用SQLite的安装配置、CppSQLite库封装优势、核心功能(如数据库连接、事务管理)、跨平台支持及性能优... 目录Windows下C++使用SQLite1、安装2、代码示例CppSQLite:C++轻松操作SQ