android gesture,Android Gesture 手势创建以及使用示例

本文介绍了在Android1.6中使用GesturesBuilder创建和使用手势的过程,包括在模拟器上创建手势文件,将其复制到工程资源目录,配置XML文件,并在活动中实现手势识别。通过GestureOverlayView进行手势输入,利用GestureLibrary进行手势匹配,实现特定手势触发不同功能,如关闭活动、拨打电话和显示Toast。同时,强调了拨打电话功能所需的权限设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Android1.6的模拟器里面预装了一个叫Gestures Builder的程序,这个程序就是让你创建自己的手势的(Gestures Builder的源代码在sdk问samples里面有,有兴趣可以看看)

40412325fb0c5085980a05f6e83b7585.png

将上面这四个文件复制到你的工程目录下面,如图所示

9f908e6b5b968f421a68c5e1344bfa68.png

在模拟器上面运行这个工程文件,在模拟器上面创建一些手势文件,例如:

2a9224fa3bdc1ba7124ec8d785439439.png

创建的手势将被保存到/mnt/sdcard/gestures里面,然后新建一个测试的手势项目文件,将gestures文件复制到res目录中的raw文件下面,

b0a46001dc118c3adfccb0fb9f9796da.png

然后配置xml文件,xml配置如下:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context="com.xunfang.gesture.MainActivity" >

android:id="@+id/gv"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#000000"

android:gestureStrokeWidth="10"

android:gestureColor="#ff0000"

/>

GestureOverlayView:一种用于手势输入的透明覆盖层,可覆盖在其他控件的上方,也可包含其他控件。

Android:gestureStrokeType 定义笔画(定义为手势)的类型

Android:gestureStrokeWidth 画手势时,笔划的宽度

activity文件内容如下

package com.xunfang.gesture;

import java.util.ArrayList;

import android.app.Activity;

import android.content.Intent;

import android.gesture.Gesture;

import android.gesture.GestureLibraries;

import android.gesture.GestureLibrary;

import android.gesture.GestureOverlayView;

import android.gesture.Prediction;

import android.net.Uri;

import android.os.Bundle;

import android.view.MotionEvent;

import android.widget.Toast;

public class MainActivity extends Activity {

private GestureOverlayView gv ;

private boolean loadStatus ;

private GestureLibrary gestureLibrary ;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

//拿到控件

gv = (GestureOverlayView) findViewById(R.id.gv) ;

//创建加载手势库的工具

gestureLibrary =  GestureLibraries.fromRawResource(this, R.raw.gestures) ;

//加载手势库

loadStatus = gestureLibrary.load() ;

//给gv控件加一个监听器

//OnGesturePerformedListener监听器监听一种手势(一笔画完)

gv.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener(){

@Override

public void onGesturePerformed(GestureOverlayView overlay,

Gesture gesture) {

//如果手势库加载成功

if(loadStatus){

//识别手势  Prediction是一个相似度对象,集合中的相似度是从高到低进行排列

ArrayList pres = gestureLibrary.recognize(gesture) ;

if(!pres.isEmpty()){

//拿到相似度最高的对象

Prediction pre = pres.get(0) ;

//用整型的数表示百分比  >60%

if(pre.score > 6){

//拿到手势的名字判断进行下一步逻辑

if("94".equals(pre.name)){

//说明想关掉当前的activity

finish() ;

}else if("yes".equals(pre.name)){

//说明想打电话了

Intent intent = new Intent() ;

intent.setAction(Intent.ACTION_CALL) ;

intent.setData(Uri.parse("tel://110")) ;

startActivity(intent) ;

}else if("666".equals(pre.name)){

//说明你想弹一个土司

Toast.makeText(MainActivity.this, "哈哈,我弹出来了", 0).show() ;

}

}else{

Toast.makeText(MainActivity.this, "手势不匹配", 0).show() ;

}

}else{

Toast.makeText(MainActivity.this, "手势库加载失败", 0).show() ;

}

}

}

}) ;

这里用到了拨打电话的界面,一定要添加权限,如下图所示

172f9605833ea0442796ee849eae821d.png

这里之后代码就玩了,可以进行测试。

我输入一个6

9ff786f29df61edd827b970f3a5626fe.png

然后就弹出来了。表示验证成功。

0b1331709591d260c1c78e86d0c51c18.png

以下是一个使用Android Studio的手势识别的示例代码: ```java import android.gesture.Gesture; import android.gesture.GestureLibraries; import android.gesture.GestureLibrary; import android.gesture.GestureOverlayView; import android.gesture.GestureStroke; import android.gesture.GestureUtils; import android.gesture.Prediction; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.Toast; import java.util.ArrayList; public class MainActivity extends AppCompatActivity implements GestureOverlayView.OnGesturePerformedListener { private GestureLibrary gestureLibrary; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); GestureOverlayView gestureOverlayView = findViewById(R.id.gestureOverlayView); gestureOverlayView.addOnGesturePerformedListener(this); gestureLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures); if (!gestureLibrary.load()) { Toast.makeText(this, "手势库加载失败", Toast.LENGTH_SHORT).show(); } } @Override public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { ArrayList<Prediction> predictions = gestureLibrary.recognize(gesture); if (predictions.size() > 0) { Prediction prediction = predictions.get(0); if (prediction.score > 2.0) { Toast.makeText(this, "识别到手势:" + prediction.name, Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "无法识别手势", Toast.LENGTH_SHORT).show(); } } } } ``` 这段代码演示了如何在Android Studio中使用手势识别。首先,我们需要在`onCreate`方法中加载手势库文件。然后,我们将`GestureOverlayView`添加到布局中,并设置`OnGesturePerformedListener`监听器。当手势被执行时,`onGesturePerformed`方法将被调用。在这个方法中,我们使用`gestureLibrary.recognize`方法来识别手势,并根据识别结果进行相应的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值