您好,登錄后才能下訂單哦!
正如之前所說的,使用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>
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。