手势识别(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属性为手势名。

posted @ 2013-07-10 18:19  谈笑风生膜法师  阅读(2980)  评论(0编辑  收藏  举报