▼Androidメモ▼
ジェスチャーライブラリ


初回のジェスチャーをジェスチャーライブラリに保存し、以降のジェスチャーと比較するプログラムを作成する。


ソースコード
GestureLibEx.java
package net.npaka.GestureLibEx;
import java.util.ArrayList;
import android.app.Activity;
import android.gesture.Gesture;
import android.gesture.GestureLibraries;
import android.gesture.GestureLibrary;
import android.gesture.GestureOverlayView;
import android.gesture.Prediction;
import android.graphics.Color;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.Toast;

//ジェスチャーの利用
public class GestureLibEx extends Activity implements 
    GestureOverlayView.OnGestureListener,
    GestureOverlayView.OnGesturePerformedListener,
    GestureOverlayView.OnGesturingListener {
    private GestureLibrary gestureLib;
    
    //アプリの初期化
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        
        //レイアウトの生成
        LinearLayout layout=new LinearLayout(this);
        layout.setBackgroundColor(Color.rgb(255,255,255));
        layout.setOrientation(LinearLayout.VERTICAL);
        setContentView(layout);            
        
        //ジェスチャーライブラリの生成
        gestureLib=GestureLibraries.fromPrivateFile(this,"gestures");
        
        //ジェスチャービューの生成
        GestureOverlayView view=new GestureOverlayView(this);
        view.setGestureStrokeType(
            GestureOverlayView.GESTURE_STROKE_TYPE_SINGLE);
        view.addOnGestureListener(this);
        view.addOnGesturePerformedListener(this);
        view.addOnGesturingListener(this);
        setLLParams(view);
        layout.addView(view);
    }

    //ジェスチャー開始時に呼ばれる
    public void onGestureStarted(GestureOverlayView overlay,MotionEvent event) {
        android.util.Log.v("","onGestureStarted");
    }
    
    //ジェスチャー中に呼ばれる
    public void onGesture(GestureOverlayView overlay,MotionEvent event) {
    	android.util.Log.v("","onGesture");
    }

    //ジェスチャーキャンセル時に呼ばれる
    public void onGestureCancelled(GestureOverlayView overlay,MotionEvent event) {
        android.util.Log.v("","onGestureCancelled");
    }    

    //ジェスチャー終了時に呼ばれる
    public void onGestureEnded(GestureOverlayView overlay,MotionEvent event) {
        android.util.Log.v("","onGestureEnded");
    }
    
    //ジェスチャー認識時に呼ばれる
    public void onGesturingStarted(GestureOverlayView overlay) {
        android.util.Log.v("","onGesturingStarted");
    }

    //ジェスチャー認識終了時に呼ばれる
    public void onGesturingEnded(GestureOverlayView overlay) {
        android.util.Log.v("","onGesturingEnded");
    }
    
    //ジェスチャー認識時に呼ばれる
    public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
        //ジェスチャー初回
        if (gestureLib.getGestureEntries().size()==0) {
            //ジェスチャー保存
            gestureLib.addGesture("First",gesture);
            gestureLib.save();
            Toast.makeText(GestureLibEx.this,"ジェスチャー保存",
                Toast.LENGTH_SHORT).show();
        } 
        //ジェスチャー2回目以降
        else {
            ArrayList predictions=gestureLib.recognize(gesture);
            for (int i=0;i<predictions.size();i++) {
                Prediction p=predictions.get(i);
                Toast.makeText(GestureLibEx.this,
                    "スコア:"+p.score,Toast.LENGTH_SHORT).show();
            }
        }
    }
    
    //ライナーレイアウトのパラメータ指定
    private static void setLLParams(View view) {
        view.setLayoutParams(new LinearLayout.LayoutParams(
            LinearLayout.LayoutParams.FILL_PARENT,
            LinearLayout.LayoutParams.FILL_PARENT));
    }  
}




−戻る−