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屬性為手勢名。