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