加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、容器安全、数据加密、云日志、云数据迁移!
当前位置: 首页 > 教程 > 正文

使用GestureOverlayView展开手势识别

发布时间:2023-11-03 11:30:24 所属栏目:教程 来源:未知
导读:    正如之前所说的,使用GestureDetector的识别方法,手势的种类非常有限,如果需要对复杂的手势进行识别,就需要GestureOverlayView的方法



   GestureOverlayView的使用
   正如之前所说的,使用GestureDetector的识别方法,手势的种类非常有限,如果需要对复杂的手势进行识别,就需要GestureOverlayView的方法    
 
      GestureOverlayView的使用:
 
  首先使用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<Prediction> 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();
 
  }
 
  }
 
  });
 
 
  }
 
  }
 
  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 
      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.gesture.GestureOverlayView
 
          android:id="@+id/gestureOverlayView1"
 
          android:layout_width="400px"
 
          android:layout_height="400px"
 
          android:gestureColor="#FF0000"
 
          android:gestureStrokeWidth="2"
 
          android:gestureStrokeType="multiple"
 
           >
 
      <ImageView
 
          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" />
 
      </android.gesture.GestureOverlayView>
 
  </RelativeLayout>
 

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章