Android实现手势检测
16lz
2021-01-26
效果图
代码
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(); } } }); }}
更多相关文章
- Android中的人机交互技术
- Qt for Android程序沉浸式启动页面(去除标题栏、去除黑屏、保留后
- 扩大攻击层面:React Native Android应用程序
- 为何Android普通APP可以执行私有数据中的so文件,而system app却不
- Android(安卓)GifImageView加载Gif图片及原理
- [置顶] Android无线开发的几种常用技术(阿里巴巴资深工程师原创
- Android使用Socket(Tcp/Udp)协议进行数据传输(传输大文件)
- Maven系列 7.文档和报告
- JS、Android、IOS 批量生成国际化字符串工具