android之手势识别

 

 这里给出一个手势识别的简单Demo.

第一步,建立手势库。

使用SDK自带例子GestureBuilder建立手势库(位置:android-sdk-windows\samples\android-8\GestureBuilder)。使用GestureBuilder之前,你需要恢复其到开   发环境,然后进行编绎并部署到手机上。此时,就可以使用GestureBuilder建立手势库,生成的手势库文件在SCDard上,默认文件名称为:gestures

第二步,应用中加载手势库文件,然后开发手势识别代码。

把手势库文件拷贝到项目的res/raw目录下,然后在布局文件中加入用于手势绘制的view.

 <android.gesture.GestureOverlayView

    android:id="@+id/gestures"

    android:layout_width="fill_parent“ android:layout_height="0dip"

    android:layout_weight="1.0"

    />

大多数情况下,手势都是通过一笔完成。然而有一些特别的需求就需要通过多个笔画来实现,这时可以使用gestureStrokeType属性进行设置:Multiple:1

 

下面就上代码了。

首先把利用GestureBuilder工程生成的手势库文件导入到我们的工程,位置如下图。

 

 

这个是我加入的手势,如下

 

 

 

布局文件的代码如下:

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
   
      <android.gesture.GestureOverlayView
        android:id="@+id/gestures_overlay"
        android:layout_width="match_parent"
        android:layout_height="0dip"
        android:layout_weight="1.0"
        android:gestureStrokeType="multiple" />  // 一般情况下 ,手势是通过一笔完成的,但是如果我们需要通过多笔来完成一个手势的时候,我们

                                                                                   //  需要设置这个属性。
   
</LinearLayout>

 

 

package com.test.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.gesture.GestureOverlayView.OnGesturePerformedListener;
import android.net.Uri;
import android.os.Bundle;

public class MainActivity extends Activity {
 
  private  GestureLibrary  library = null;
  private  boolean  success;
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
           //获得可以画手势的控件
        GestureOverlayView   gestureView = (GestureOverlayView) this.findViewById(R.id.gestures_overlay);

      
        gestureView.addOnGesturePerformedListener(new GestureListener()); 

       //加载手势库 ,该手势库是通过android自带的程序创建的。

      
  library = GestureLibraries.fromRawResource(this, R.raw.gestures);
        //判断加载是否成功
        success = library.load();
       
    }

 

  private final  class GestureListener implements OnGesturePerformedListener {

   @Override
   public void onGesturePerformed(GestureOverlayView overlay,
     Gesture gesture) {
    
    
          if(success){

 

          从手势库中查找匹配的手势,最匹配的放在最前面。

          ArrayList<Prediction>  predictions = library.recognize(gesture);


           if(!predictions.isEmpty()){

          如果手势库中有相似的手势存在,我们就要得到第一个元素来进行处理。

          我们在处理该元素的时候,可以通过匹配度进行判断,匹配度是一个0—10之间的数字。0是匹配度最低,10是匹配度最高。


            Prediction prediction = predictions.get(0);


            if (prediction.score>3){

           //  我们如果在GestureOverlayView   画了一个匹配度大约3的 对号。 该应用程序就会被关掉。
            if("agree".equals(prediction.name)){
             android.os.Process.killProcess(android.os.Process.myPid());
             
            }else if("call".equals(prediction.name)){
             Intent intent  = new  Intent(Intent.ACTION_CALL, Uri.parse("tel:5556"));
             startActivity(intent);
            }
            }
           }
          }
    
   }
      
      
     }
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值