Android-GestureOverlayView自定义手势命令

目标效果:

   

程序运行,画左箭头提示上一个,画右箭头提示下一个,并且还可以画符号退出程序。

这里自定义手势使用的是GestureOverlayView进行设置的,SDK2.0以上系统都自带了一个GestureBuilder手势库,SDK4.2以前路径是android-sdk-windows\samples\android-10\GestureBuilder,4.2以后路径是sdk-extras-android-support-samples-GestureBuilder,有时可能自己安装的并没有这个库,那就需要下载一个放到路径的目录中,下载地址http://pan.baidu.com/s/1bpbno6r

1.首先需要导入手势库,添加手势文件,模拟器上有现成的软件这一步可以省略,但是真机测试时需要导入在手机上运行,因为我之前导入一次了,所以下边截图时提示红色错号和Finish不能点击,第一次导入都是正常的。(没有图示的直接点击next)

 

2.运行后,模拟器或手机上会多了一个小程序。

3.打开后添加项目需要的手势,保存后如图三,提示保存路径,模拟器保存路径为storage-sdcard-gestures,真机保存路径为storage-emulated-0-gestures。(可能不同手机路径不同)

 
 

4.现在只需要找到gestures文件,打开File Explorer,图一为模拟器的文件路径storage-sdcard-gestures,图二为真机的文件路径mnt-shell-emulated-0-gestures。(暂时不太明白为什么为什么真机的路径和保存时提示的不太一样)

5.导入gestures文件到桌面,新建项目,在res文件夹下新建raw文件夹,将gestures文件复制到raw文件夹中。

6.activity_main.xml页面放置一个ImageView控件和GestureOverlayView控件,并且使用GestureOverlayView控件将ImageView控件包含起来。(不包含也可以,GestureOverlayView控件默认在所有控件上方)

activity_main.xml页面:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <!--
    	Android:eventsInterceptionEnabled  定义当手势已经被识别出来时,是否拦截该手势
    	Android:fadeDuration  当用户画完,手势效果淡出的时间
    	Android:fadeEnabled  用户画完之后,手势是否自动淡出
    	Android:gestureColor  手势的颜色
    	Android:gestureStrokeType  笔画的类型
    	Android:geatureStrokeWidth  笔画的粗细
    -->
    <android.gesture.GestureOverlayView
        android:gestureColor="#ff0000"
        android:gestureStrokeWidth="10"
        android:id="@+id/gestureOverlayView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <ImageView
            android:id="@+id/ivShow"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:src="@drawable/ic_launcher" />
    </android.gesture.GestureOverlayView>

</RelativeLayout>

7.MainActivity.java页面匹配识别手势。

MainActivity.java页面:

package com.example.gestureoverlayview;

import java.util.ArrayList;

import android.os.Bundle;
import android.app.Activity;
import android.gesture.Gesture;
import android.gesture.GestureLibraries;
import android.gesture.GestureLibrary;
import android.gesture.GestureOverlayView;
import android.gesture.GestureOverlayView.OnGesturePerformedListener;
import android.gesture.Prediction;
import android.view.Menu;
import android.widget.Toast;

public class MainActivity extends Activity {

	private GestureOverlayView gestureOverlayView;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		gestureOverlayView=(GestureOverlayView) findViewById(R.id.gestureOverlayView);

		/*找到预设定的手势文件并加载进来*/
		final GestureLibrary library=GestureLibraries.fromRawResource(MainActivity.this,R.raw.gestures);//获取手势文件
		library.load();
		/*匹配识别*/
		gestureOverlayView.addOnGesturePerformedListener(new OnGesturePerformedListener() {

			@Override
			public void onGesturePerformed(GestureOverlayView arg0, Gesture gesture) {
				//读出手势库中内容 识别手势
				ArrayList<Prediction> mygesture=library.recognize(gesture);
				Prediction predction=mygesture.get(0);
				if(predction.score>=4.0){//相似度大于某个值(数字越大代表要求越相似),说明有该手势
					if(predction.name.equals("exit")){
						finish();
					}else if(predction.name.equals("next")){
						Toast.makeText(MainActivity.this,"下一个",Toast.LENGTH_SHORT).show();
					}else if(predction.name.equals("previous")){
						Toast.makeText(MainActivity.this,"上一个",Toast.LENGTH_SHORT).show();
					}
				}else{
					Toast.makeText(MainActivity.this,"没有该手势",Toast.LENGTH_SHORT).show();
				}
			}
		});
	}
}
 

8.运行就可以显示目标效果了。

时间: 2024-08-02 11:13:06

Android-GestureOverlayView自定义手势命令的相关文章

android自定义手势解锁View

有时候为了程序的安全性,我们经常要采取一些安全措施,就像我们常用的支付宝那样,隔一定的时间再回到应用程序时会让用户利用手势去解锁应用程序,最近由于项目需求,也要求做这样一个功能,当用户切出本应用程序15分钟后回来,让用户手势解锁,整个需求的难点就在如何实现这个手势锁,开始一点头绪也没有,没有一点思路去实现这个手势解锁功能,在google了一番后看了一篇非常好的博客后,按照博主的思路的确是可以实现一个十分不错的手势锁View,也参考了下那位大神的代码,下面是我根据他的思路和代码片段实现的一个自定义

自定义手势--输入法手势技术

进行软件开发时,通常我们都喜欢使用较新版本的工具,但这里我为什么使用低版本的SDK来开发Android游戏呢?这里介绍下原因: 1.Android SDK属于向下兼容!那么低版本可以运行的,高版本基本上更是没问题!(当然每次SDK的更新也会带来新功能,或者修改了一些原来的BUG等等,那么其实对于游戏开发来说,如果你的游戏中不需要更高的SDK版本的支持情况下,完全不必去追求最新的SDK!) 2.使用低版本进行游戏开发这样能兼顾更多的机型,获取更多的用户! 3.大家都知道Android SDK 每次

Android-手势识别(自定义手势识别:四种自定义手势)

1.回顾 上篇实现: (1)OnTouchListener 实现 上下左右手势识别 (2)OnTouchListener + SimpleOnGestureListener + GestureDetector 实现 上下左右 手势识别 2.重点 (1)GestureOverlayView + GestureLibrary + OnGesturePerformedListener 实现 自定义手势识别 (2)demo 下载 3.效果图 4. 基本步骤 (1)自定义手势识别文件 (2)加载 手势文件

【2014年最后的分享啦】Android实现自定义刮刮卡效果View

一.简介: 今天是2014年最后一天啦,首先在这里,我祝福大家在新的2015年都一个个的新健康,新收入,新顺利,新如意!!! 上一偏,我介绍了用Xfermode实现自定义圆角和椭圆图片view的博文<Android实现自定义圆形.圆角和椭圆ImageView(使用Xfermode图形渲染方法)>, 今天我们来看看如何实现电商app里常用到的刮刮卡效果的view组件,其实原理和实现圆角图片的差不多,都是使用Xfermode渲染模式来实现的. (老规矩,源码在博文最后给出哈) 基本原理步骤是这样的

Android实现自定义view---绘制图片

主要原理是:extends view重载onDrow(),需要一bitmap,重载view,在 canvas上画临时bmp,当按下确定的时候按下 画到real_bmp上,其他的跟前面的基本上没有什么区别. import com.example.test.R; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Can

用简单的方法,在android上实现手势放大缩小功能

package com.example.eventtest; import java.util.ArrayList; import android.os.Bundle; import android.app.Activity; import android.gesture.GestureOverlayView; import android.gesture.GestureOverlayView.OnGestureListener; import android.graphics.Point; i

Android中的手势

Android对两种手势行为提供了支持:1.对于第一种手势行为而言,Android提供了手势检测,并为手势检测提供了相应的监听器.2.对于第二种手势行为,Android允许开发者添加手势,并提供了相应的API识别用户手势. GestureDetector.OnGestureListener就是一个监听器.负责对用户的手势行为提供相应.boolean onDown(MotionEvent e):当触碰事件按下时触发该方法.boolean onFling(MotionEvent e1,MotionE

【原创】android——Tabhost 自定义tab+底部实现+intent切换内容

1,实现tabhost自定义格式,再此仅仅显示背景和文字,效果图预览:(底边栏所示) (图片变形) 2,xml配置 activity_user的XML配置  1 <TabHost xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:id="@+id/tabhost&qu

【Android】-- adb shell 命令探索

ADB是什么,做android开发的没有不知道的. window下运行cmd,输入adb help就会打印adb都能够做的事情,包括 adb push ..adb pull .. adb devices  adb install... 等等..并且一搜一大把. 其中有一个命令叫做  adb shell,android是基于linux的,shell模式下linux的命令可是非常多的,android去掉了许多linux的命令,那么从这写命令里面又能够发现什么宝藏呢?寻宝之旅开启!! 首先linux的