效果图

代码

public class MainActivity extends AppCompatActivity{    private static final String TAG = "MainActivity";    private GestureOverlayView overlayview;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        overlayview = (GestureOverlayView) findViewById(R.id.gestureoverlayview);        overlayview.setGestureStrokeWidth(8);        overlayview.setGestureColor(Color.GREEN);        //添加手势完成时监听        overlayview.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {            @Override            public void onGesturePerformed(GestureOverlayView overlay, final Gesture gesture) {                View view = getLayoutInflater().inflate(R.layout.dialog_save_gesture,null);                ImageView iv = (ImageView) view.findViewById(R.id.iv_geture);                final EditText et = (EditText) view.findViewById(R.id.et);//                把手势转化为图片,此处的颜色必须带透明度,否则图片无法显示                Bitmap bitmap = gesture.toBitmap(128, 128, 5, 0xffff0000);                iv.setImageBitmap(bitmap);                new AlertDialog.Builder(MainActivity.this).setView(view)                        .setNegativeButton("取消", new DialogInterface.OnClickListener() {                            @Override                            public void onClick(DialogInterface dialog, int which) {                            }                        }).setPositiveButton("保存", new DialogInterface.OnClickListener() {                    @Override                    public void onClick(DialogInterface dialog, int which) {                        //创建保存手势文件的文件                        File dir = new File(Environment.getExternalStorageDirectory(),"gesture");                        if(!dir.exists()){                            dir.mkdirs();                        }                        File file = new File(dir,"gestures");                        if(!file.exists()){                            try {                                file.createNewFile();                            } catch (IOException e) {                                e.printStackTrace();                            }                        }                        GestureLibrary gestureLibrary = GestureLibraries.fromFile(file);                        //添加手势名称并保存                        gestureLibrary.addGesture(et.getText().toString(),gesture);                        gestureLibrary.save();                    }                }).show();            }        });    }    public void startSecond(View view){        Intent intent = new Intent(this,SecondActivity.class);        startActivity(intent);    }}
public class SecondActivity extends AppCompatActivity {    private GestureLibrary gestureLibrary;    private GestureOverlayView overlayView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_second);        File dir = new File(Environment.getExternalStorageDirectory(),"gesture");        File file = new File(dir,"gestures");         gestureLibrary = GestureLibraries.fromFile(file);        //从指定文件加载手势        if(gestureLibrary.load()){            Toast.makeText(this,"加载成功",Toast.LENGTH_SHORT).show();        }else{            Toast.makeText(this,"加载失败",Toast.LENGTH_SHORT).show();        }        overlayView = (GestureOverlayView) findViewById(R.id.gestureoverlayview);        overlayView.setGestureColor(Color.GREEN);        overlayView.setGestureStrokeWidth(5);        overlayView.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {            @Override            public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {                //获取识别到的手势集合                ArrayList predictions = gestureLibrary.recognize(gesture);                ArrayList result = new ArrayList();                for (Prediction pre:predictions){                    if(pre.score>2.0){                        result.add("与手势【"+pre.name+"】相似度为"+pre.score);                    }                }                if (result.size() >0) {                    ArrayAdapter adapter = new ArrayAdapter(SecondActivity.this,                            android.R.layout.simple_list_item_1,result);                    new AlertDialog.Builder(SecondActivity.this).setAdapter(adapter,null)                            .setPositiveButton("确定",null).show();                } else {                    Toast.makeText(SecondActivity.this,"无法找到匹配的手势",Toast.LENGTH_SHORT).show();                }            }        });    }}

更多相关文章

  1. Android中的人机交互技术
  2. Qt for Android程序沉浸式启动页面(去除标题栏、去除黑屏、保留后
  3. 扩大攻击层面:React Native Android应用程序
  4. 为何Android普通APP可以执行私有数据中的so文件,而system app却不
  5. Android(安卓)GifImageView加载Gif图片及原理
  6. [置顶] Android无线开发的几种常用技术(阿里巴巴资深工程师原创
  7. Android使用Socket(Tcp/Udp)协议进行数据传输(传输大文件)
  8. Maven系列 7.文档和报告
  9. JS、Android、IOS 批量生成国际化字符串工具

随机推荐

  1. android ui界面设计参数讲解
  2. Android(安卓)TextView常用属性介绍Andro
  3. Android(安卓)数据的读取与写入2
  4. Android之screenOrientation属性
  5. Android中的inputType属性简单用法.
  6. Android(安卓)xml资源文件中@、@android:
  7. Android内核学习笔记
  8. Android相对布局属性全集
  9. Android异步处理系列文章四篇之三
  10. Android(安卓)xml资源文件中@、@android: