实现思路:将手势写入GestureLibrary中,对其他手势进行匹配对比,进行识别

  • 先在布局中加入GestureOverlayView组件
 <android.gesture.GestureOverlayView        android:id="@+id/add_gesture"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_weight="1"        android:gestureStrokeType="multiple"        />    <View        android:layout_width="match_parent"        android:layout_height="1dp"        android:background="#AFAFAF"        />    <android.gesture.GestureOverlayView        android:id="@+id/recognize_gesture"        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_weight="1"        android:gestureStrokeType="multiple"        />
android:gestureStrokeType=""     multiple:手势需要多笔完成    single:手势一笔完成
  • 代码:
package top.helloworlds.gesture;import android.content.DialogInterface;import android.gesture.Gesture;import android.gesture.GestureLibraries;import android.gesture.GestureLibrary;import android.gesture.GestureOverlayView;import android.gesture.Prediction;import android.graphics.Bitmap;import android.graphics.Color;import android.os.Bundle;import android.support.v7.app.AlertDialog;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.view.View;import android.widget.ArrayAdapter;import android.widget.EditText;import android.widget.ImageView;import android.widget.Toast;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {    GestureOverlayView addGesture;    GestureOverlayView recognizeGesture;    GestureLibrary library;    //设置手势库存储的路径    final String LIBRARY_PATH = "/mnt/sdacrd/Gesture";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);        setSupportActionBar(toolbar);        //添加手势        addNewGesture();        //识别手势        recognizeTheGesture();    }    private void recognizeTheGesture() {        //读取手势库        library = GestureLibraries.fromFile(LIBRARY_PATH);        if (library.load()) {            Toast.makeText(MainActivity.this, "装载成功", Toast.LENGTH_SHORT).show();        } else {            Toast.makeText(MainActivity.this, "装载失败", Toast.LENGTH_SHORT).show();        }        //获取手势编辑组件        recognizeGesture = (GestureOverlayView) findViewById(R.id.recognize_gesture);        //为组件添加监听器        recognizeGesture.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {            @Override            public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {                //识别绘制的手势库                ArrayList<Prediction> predictions = library.recognize(gesture);                ArrayList<String> result = new ArrayList<String>();                //遍历所有找到的Prediction对象                for (Prediction pred : predictions) {                    //当相识度大于2.0时输出                    if (pred.score > 2.0) {                        result.add("与"+pred.name+"相似的为"+pred.score);                    }                }                if (result.size() > 0) {                    //使用一个带List的对话框来显示所有匹配的手势                    ArrayAdapter<Object> adapter = new ArrayAdapter<Object>(MainActivity.this,                            android.R.layout.simple_dropdown_item_1line,                            result.toArray());                    //显示在对话框内                    new AlertDialog.Builder(MainActivity.this)                            .setAdapter(adapter, null)                            .setPositiveButton("确定", null).show();                } else {                    Toast.makeText(MainActivity.this, "未找到匹配的手势", Toast.LENGTH_SHORT).show();                }            }        });    }    private void addNewGesture() {        //获取手势编辑视图        addGesture = (GestureOverlayView) findViewById(R.id.add_gesture);        //设置手势绘制的颜色        addGesture.setGestureColor(Color.RED);        //设置手势的绘制宽度        addGesture.setGestureStrokeWidth(4);        //添加监听事件        addGesture.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {            @Override            public void onGesturePerformed(GestureOverlayView overlay, final Gesture gesture) {                //加载布局文件所代表的视图                View saveDialog = getLayoutInflater().inflate(R.layout.dialog, null);                ImageView imageView = (ImageView) saveDialog.findViewById(R.id.imageView);                final EditText editText = (EditText) saveDialog.findViewById(R.id.editText);                //根据Gesture包含的手势创建位图                Bitmap bitmap = gesture.toBitmap(128, 128, 10, Color.RED);                imageView.setImageBitmap(bitmap);                //使用对话框显示布局文件                new AlertDialog.Builder(MainActivity.this)                        .setView(saveDialog)                        .setPositiveButton("保存", new DialogInterface.OnClickListener() {                            @Override                            public void onClick(DialogInterface dialog, int which) {                                //获取指定文件对应的手势库                                GestureLibrary gestureLibrary = GestureLibraries.fromFile(LIBRARY_PATH);                                //添加手势                                gestureLibrary.addGesture(editText.getText().toString(), gesture);                                //保存手势库                                gestureLibrary.save();                            }                        })                        .setNegativeButton("取消", null)                        .show();            }        });    }}

更多相关文章

  1. Android实现手势滑动(左滑和右滑)
  2. [Android入门]体系结构、UI组件使用、获得帮助、分析TinyPlayer
  3. Android 开源组件无限循环ViewPager
  4. Android 自定义标签 和 自定义组件
  5. Android手势翻页效果
  6. Android手势检测简介
  7. Android常用UI组件 - TextView
  8. 2011.08.18(2)——— android 自定义组合组件 onFinishInflate onS
  9. Android 将activity设置成对话框样式

随机推荐

  1. Android应用程序创建桌面快捷方式
  2. android jni
  3. Android(安卓)5.1截获HOME键
  4. Android(安卓)Studio 快捷键
  5. 导入android studio 项目错误:Error:(1, 0
  6. Android开发环境搭建,各版本系统下androi
  7. android:ClassNotFoundException for Act
  8. android获得手机的电量
  9. 分享20个Android游戏源码,希望大家喜欢哈!
  10. Android(安卓)ImageSwitcher 实现按钮的3