三、使用步骤
-
创建一个GestureDetector对象,创建对象时候必须创建一个GestureDectector.OnGestureListener监听器实例;
-
为应用程序的Activity(偶尔也可以为特定组件)的TouchEvent事件绑定监听器,在事件处理中制定把Activity(或特定组件)上的TouchEvent事件交给GestureDetector处理;
- public class MainActivity extends Activity implements OnGestureListener {
-
- GestureDetector detector;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main_activity);
-
-
- detector = new GestureDetector(this, this);
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent event) {
-
- return detector.onTouchEvent(event);
- }
-
- @Override
- public boolean onDown(MotionEvent e) {
-
- Toast.makeText(this, "OnDown", Toast.LENGTH_LONG).show();
- return false;
- }
-
- @Override
- public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
- float velocityY) {
-
- Toast.makeText(this, "onFling", Toast.LENGTH_LONG).show();
- return false;
- }
-
- @Override
- public void onLongPress(MotionEvent e) {
-
- Toast.makeText(this, "onLongPress", Toast.LENGTH_LONG).show();
- }
-
- @Override
- public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
- float distanceY) {
-
- Toast.makeText(this, "onScroll", Toast.LENGTH_LONG).show();
- return false;
- }
-
- @Override
- public void onShowPress(MotionEvent e) {
-
- Toast.makeText(this, "onShowPress", Toast.LENGTH_LONG).show();
- }
-
- @Override
- public boolean onSingleTapUp(MotionEvent e) {
-
- Toast.makeText(this, "onSingleTapUp", Toast.LENGTH_LONG).show();
- return false;
- }
- }
四、增加手势
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal"
- android:text="请在下面屏幕上绘制手势" />
-
- <android.gesture.GestureOverlayView
- android:id="@+id/gesture"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:gestureStrokeType="multiple" />
- </LinearLayout>
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal" >
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginRight="8dip"
- android:text="请输入手势名称" />
-
- <EditText
- android:id="@+id/gesture_name"
- android:layout_width="match_parent"
- android:layout_height="wrap_content" />
- </LinearLayout>
-
- <ImageView
- android:id="@+id/show"
- android:layout_width="match_parent"
- android:layout_height="128dp"
- android:layout_marginTop="10dp"
- android:layout_weight="0.29" />
- </LinearLayout>
- public class MainActivity extends Activity {
- EditText editText;
- GestureOverlayView gestureOverlayView;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main_activity);
-
-
- editText = (EditText) findViewById(R.id.gesture_name);
-
- gestureOverlayView = (GestureOverlayView) findViewById(R.id.gesture);
-
- gestureOverlayView.setGestureColor(Color.RED);
-
- gestureOverlayView.setGestureStrokeWidth(4);
-
- gestureOverlayView.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 gestureEditText = (EditText) saveDialog.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 guestureLibrary = GestureLibraries.fromFile(Environment
- .getExternalStorageDirectory().getPath()+ "/mygestures");
-
- guestureLibrary.addGesture(gestureEditText.getText().toString(), gesture);
- guestureLibrary.save();
- }
- }).setNegativeButton("取消", null).show(); }
- });
- }
- }
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical" >
- <android.gesture.GestureOverlayView
- android:id="@+id/gesture"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:gestureStrokeType="multiple" />
- </LinearLayout>
- public class MainActivity extends Activity {
-
- GestureOverlayView gestureOverlayView;
-
- GestureLibrary gestureLibrariLibrary;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main_activity);
-
- gestureOverlayView = (GestureOverlayView) findViewById(R.id.gesture);
- gestureLibrariLibrary = GestureLibraries.fromFile(Environment.getExternalStorageDirectory().getPath() + "/mygestures");
-
- if (gestureLibrariLibrary.load()) {
- Toast.makeText(MainActivity.this, "手势文件装在成功", Toast.LENGTH_LONG).show();
- } else {
- Toast.makeText(MainActivity.this, "手势文件装在失败", Toast.LENGTH_LONG).show();
- }
-
-
- gestureOverlayView.addOnGesturePerformedListener(new OnGesturePerformedListener() {
-
- @Override
- public void onGesturePerformed(GestureOverlayView overlay,Gesture gesture) {
-
- ArrayList<Prediction> predictions = gestureLibrariLibrary.recognize(gesture);
- ArrayList<String> result = new ArrayList<String>();
-
- for (Prediction prediction : predictions) {
-
- if (prediction.score > 0.2) {
- result.add("与手势{" + prediction.name + "}相似度为:"+ prediction.score);
- }
- }
-
- if (result.size() > 0) {
- ArrayAdapter<Object> arrayAdapter = new ArrayAdapter<Object>(MainActivity.this,
- android.R.layout.simple_dropdown_item_1line,
- result.toArray());
- new AlertDialog.Builder(MainActivity.this).setAdapter(arrayAdapter, null).setPositiveButton("确定", null).show();
- } else {
- Toast.makeText(MainActivity.this, "无法能找到匹配的手势",
- Toast.LENGTH_LONG).show();
- }
- }});
- }
- }
Android基本功:手势,布布扣,bubuko.com
Android基本功:手势
原文:http://www.cnblogs.com/android100/p/Android-hand-shi.html