手勢識別(GestureOverlayView)


package org.hjw.addgestest;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.gesture.Gesture;
import android.gesture.GestureLibraries;
import android.gesture.GestureLibrary;
import android.gesture.GestureOverlayView;
import android.gesture.GestureOverlayView.OnGesturePerformedListener;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.view.Menu;
import android.view.View;
import android.widget.EditText;
import android.widget.ImageView;

public class MainActivity extends Activity {

    EditText edit;
    GestureOverlayView gestureView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edit = (EditText) findViewById(R.id.gesture_name);
        gestureView = (GestureOverlayView) findViewById(R.id.gesture);// 手勢編輯圖

        gestureView.setGestureColor(Color.RED);// 手勢顏色
        gestureView.setGestureStrokeWidth(4);// 手勢寬度

        gestureView
                .addOnGesturePerformedListener(new OnGesturePerformedListener() {

                    @Override
                    public void onGesturePerformed(GestureOverlayView overlay,
                            final Gesture gesture) {
                        View saveDialog = getLayoutInflater().inflate(
                                R.layout.save, null);
                        ImageView imageView = (ImageView) saveDialog
                                .findViewById(R.id.show);
                        final EditText gestureName = (EditText) findViewById(R.id.gesture_name);
                        Bitmap bitmap = gesture.toBitmap(128, 128, 10,
                                0xffff0000);
                        imageView.setImageBitmap(bitmap);
                        new AlertDialog.Builder(MainActivity.this)
                                .setView(saveDialog)
                                .setPositiveButton("保存 ",
                                        new OnClickListener() {

                                            @Override
                                            public void onClick(
                                                    DialogInterface dialog,
                                                    int which) {
                                                GestureLibrary gestureLib = GestureLibraries
                                                        .fromFile("/storage/sdcard0/mygestures");
                                                // 獲取手勢庫
                                                gestureLib.addGesture(
                                                        gestureName.getText()
                                                                .toString(),
                                                        gesture);
                                                // 添加手勢
                                                gestureLib.save();
                                                // 保存手勢庫
                                            }
                                        }).setNegativeButton("取消", null).show();

                    }
                });

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

ps.1.GestureLibray為手勢庫,從GestureLibraries加載手勢庫文件。

     2.GestureLibrary里的addGesture方法負責添加一個新手勢,使用后還要保存。

  3.GestureLibrary里的recognize方法負責識別已輸入的手勢,返回一個類型為Prediction的ArrayList,比較Prediction里的score屬性,大於2,基本相似,name屬性為手勢名。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM