使用GestureOverlayView进行手势识别

    正如之前所说的,使用GestureDetector的识别方法,手势的种类非常有限,如果需要对复杂的手势进行识别,就需要GestureOverlayView的方法    

成都创新互联长期为超过千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为余姚企业提供专业的网站制作、网站建设,余姚网站改版等技术服务。拥有10余年丰富建站经验和众多成功案例,为您定制开发。

    GestureOverlayView的使用:

  1. 首先使用Gestures Builder程序(下面有附带文件)生成手势文件(即自定义一些需要用的手势,然后取名),如果是模拟机,然后在文件的mnt/sdcard/Download找到gestures文件,把它导出到电脑,然后在GestureOverlayView的项目文件下的layout中新建一个Folder,取名为raw,然后把gestures文件复制粘贴到raw文件下

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

使用的时候,在activity_main的xml布局文件中,在Anvanced分类中就能找到GestureOverlayView控件,然后让其包裹住需要进行操作的控件

    例子程序如下:

package com.example.gestureoverlayviewdemo;

import java.util.ArrayList;

import android.app.Activity;

import android.app.ActionBar;

import android.app.Fragment;

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.os.Bundle;

import android.view.LayoutInflater;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.ViewGroup;

import android.widget.Toast;

import android.os.Build;

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.gestureOverlayView1);

/**

* 找到刚才预设定的手势文件

* 加载那个手势文件中的所有手势

* 匹配,识别

*/

//从资源中将手势库文件加载进来

final GestureLibrary  library= GestureLibraries.fromRawResource(MainActivity.this, R.raw.gestures);

library.load();

/**

* GestureOverlayView.OnGestureListener    手势监听器

* GestureOverlayView.OnGesturePerformedListener   手势执行监听器

* GestureOverlayView.OnGesturingListener手势执行中监听器

*/

gestureOverlayView.addOnGesturePerformedListener(new OnGesturePerformedListener() {

/**

* GestureOverlayView的一些常见的XML属性设置,设置在xml中

* 1.Android:eventsInterceptionEnabled 定义当手势已经被识别出来时,是否拦截该手势动作

* 2.Android:fadeDuration    当用户画完手势效果淡出的时间

* 3.Android:fadeEnabled     当用户画完之后手势是否自动淡出

* 4.Android:gestureColor手势的颜色

* 5.Android:gestureStrokeType笔画的类型(单笔画或者多笔画)

* 6.Android:gestureStrokeWidth;

*/

@Override

public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {

//读出手势库中的内容   识别手势

ArrayList mygesture = library.recognize(gesture);//返回值是一个Prediction泛型的集合

Prediction prediction= mygesture.get(0);//每次都会从零开始拿跟输入的手势进行比对

//Prediction有两个返回值,一个是name,一个是score相似度值,自已定义

if(prediction.score>=3.0){

if(prediction.name.equals("exit")){

finish();//程序退出

}

if(prediction.name.equals("next")){

Toast.makeText(MainActivity.this, "播放下一首歌", Toast.LENGTH_SHORT).show();

}

if(prediction.name.equals("previous")){

Toast.makeText(MainActivity.this, "播放上一首歌", Toast.LENGTH_SHORT).show();

}

}else{

Toast.makeText(MainActivity.this, "没有该手势", Toast.LENGTH_SHORT).show();

}

}

});

}

}

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

    android:id="@+id/container"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context="com.example.gestureoverlayviewdemo.MainActivity"

    tools:ignore="MergeRootFrame" >

   

        android:id="@+id/gestureOverlayView1"

        android:layout_width="400px"

        android:layout_height="400px"

        android:gestureColor="#FF0000"

        android:gestureStrokeWidth="2"

        android:gestureStrokeType="multiple"

         >

   

        android:id="@+id/p_w_picpathView1"

        android:layout_width="400px"

        android:layout_height="300px"

        android:layout_alignParentTop="true"

        android:layout_centerHorizontal="true"

        android:src="@drawable/ic_launcher" />

   

附件:http://down.51cto.com/data/2368062

当前文章:使用GestureOverlayView进行手势识别
URL网址:http://azwzsj.com/article/jsiphs.html