使用GestureOverlayView展开手势识别
发布时间:2023-11-03 11:30:34 所属栏目:教程 来源:互联网
导读: 正如之前所说的,使用GestureDetector的识别方法,手势的种类非常有限,如果需要对复杂的手势进行识别,就需要GestureOverlayView的方法
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> (编辑:好传媒网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐