增加手势到手势库,我觉得这是触摸屏智能机最有用的一个功能之一,自己画一个手势保存下来,然后定义它执行的相应反应

Android使用GestureLibrary来代表手势库,并使用GestureLibraries工具类来创建手势库

[html] view plain copy print ?
  1. <!--使用手势绘制组件-->
  2. <android.gesture.GestureOverlayView
  3. android:id="@+id/gesture"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. android:gestureStrokeType="multiple"/>
  7. </LinearLayout>
xml里面写了一个属性android:gestureStrokeType="multiple"
这里可以设置single和multiple
如果你只需要识别一笔,那么single就可以了,如果不确定,那么设置成multiple
"二",就需要两笔才能画出
gesture.getStrokesCount()能得到手势的笔数
(ps:ArrayList<GestureStroke> gestureStrokeList = gesture.getStrokes();也能得到每一笔的信息)
用户画好了手势,如何保存呢
很不幸,手势不是保存到数据库中的,也不能直接保存到数据库中,它是以文件的形式存在的

GestureLibrary gestureLibrary;
Library,是的,文件是一个手势库,也就是说,一个文件对应多个手势


获得这个Library
gestureLibrary = GestureLibraries.fromFile(path);


然后保存到这个Library
gestureLibrary.addGesture(mName, mGesture);
gestureLibrary.save();

初学Android,增加手势到手势库(五十)_第1张图片

上面画了一个Z,并命名该手势为佐罗,保存

向AndroidManifest.xml添加SD卡的读写权限

[html] view plain copy print ?
  1. <uses-permissionandroid:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
  2. <uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

下面附上此例代码

main.xml

[html] view plain copy print ?
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. android:gravity="center_horizontal"
  7. >
  8. <TextView
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:text="请在下面屏幕上绘制手势"/>
  12. <!--使用手势绘制组件-->
  13. <android.gesture.GestureOverlayView
  14. android:id="@+id/gesture"
  15. android:layout_width="fill_parent"
  16. android:layout_height="fill_parent"
  17. android:gestureStrokeType="multiple"/>
  18. </LinearLayout>

弹出的保存窗口save.xml

[html] view plain copy print ?
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent">
  6. <LinearLayout
  7. android:orientation="horizontal"
  8. android:layout_width="fill_parent"
  9. android:layout_height="wrap_content">
  10. <TextView
  11. android:layout_width="wrap_content"
  12. android:layout_height="wrap_content"
  13. android:layout_marginRight="8dip"
  14. android:text="@string/gesture_name"
  15. />
  16. <!--定义一个文本框来让用户输入手势名-->
  17. <EditText
  18. android:id="@+id/gesture_name"
  19. android:layout_width="fill_parent"
  20. android:layout_height="wrap_content"/>
  21. </LinearLayout>
  22. <!--定义一个图片框来显示手势-->
  23. <ImageView
  24. android:id="@+id/show"
  25. android:layout_width="128dp"
  26. android:layout_height="128dp"
  27. android:layout_marginTop="10dp"/>
  28. </LinearLayout>


主界面代码

[java] view plain copy print ?
  1. packageWangLi.IO.AddGesture;
  2. importandroid.app.Activity;
  3. importandroid.app.AlertDialog;
  4. importandroid.content.DialogInterface;
  5. importandroid.content.DialogInterface.OnClickListener;
  6. importandroid.gesture.Gesture;
  7. importandroid.gesture.GestureLibraries;
  8. importandroid.gesture.GestureLibrary;
  9. importandroid.gesture.GestureOverlayView;
  10. importandroid.gesture.GestureOverlayView.OnGesturePerformedListener;
  11. importandroid.graphics.Bitmap;
  12. importandroid.graphics.Color;
  13. importandroid.os.Bundle;
  14. importandroid.view.View;
  15. importandroid.widget.EditText;
  16. importandroid.widget.ImageView;
  17. publicclassAddGestureextendsActivity
  18. {
  19. EditTexteditText;
  20. GestureOverlayViewgestureView;
  21. @Override
  22. publicvoidonCreate(BundlesavedInstanceState)
  23. {
  24. super.onCreate(savedInstanceState);
  25. setContentView(R.layout.main);
  26. //获取文本编辑框
  27. editText=(EditText)findViewById(R.id.gesture_name);
  28. //获取手势编辑视图
  29. gestureView=(GestureOverlayView)findViewById(R.id.gesture);
  30. //设置手势的绘制颜色
  31. gestureView.setGestureColor(Color.RED);
  32. //设置手势的绘制宽度
  33. gestureView.setGestureStrokeWidth(4);
  34. //为gesture的手势完成事件绑定事件监听器
  35. gestureView.addOnGesturePerformedListener(
  36. newOnGesturePerformedListener()
  37. {
  38. @Override
  39. publicvoidonGesturePerformed(GestureOverlayViewoverlay,
  40. finalGesturegesture)
  41. {
  42. //加载save.xml界面布局代表的视图
  43. ViewsaveDialog=getLayoutInflater().inflate(
  44. R.layout.save,null);
  45. //获取saveDialog里的show组件
  46. ImageViewimageView=(ImageView)saveDialog
  47. .findViewById(R.id.show);
  48. //获取saveDialog里的gesture_name组件
  49. finalEditTextgestureName=(EditText)saveDialog
  50. .findViewById(R.id.gesture_name);
  51. //根据Gesture包含的手势创建一个位图
  52. Bitmapbitmap=gesture.toBitmap(128,128,10,0xFFFF0000);
  53. imageView.setImageBitmap(bitmap);
  54. //使用对话框显示saveDialog组件
  55. newAlertDialog.Builder(AddGesture.this)
  56. .setView(saveDialog)
  57. .setPositiveButton("保存",newOnClickListener()
  58. {
  59. @Override
  60. publicvoidonClick(DialogInterfacedialog,
  61. intwhich)
  62. {
  63. //获取指定文件对应的手势库
  64. GestureLibrarygestureLib=GestureLibraries
  65. .fromFile("/sdcard/mygestures");
  66. //添加手势
  67. gestureLib.addGesture(gestureName.getText().toString(),
  68. gesture);
  69. //保存手势库
  70. gestureLib.save();
  71. }
  72. })
  73. .setNegativeButton("取消",null)
  74. .show();
  75. }
  76. });
  77. }
  78. }

更多相关文章

  1. Android 根文件系统启动过程(init进程 详细分析)
  2. 批量反编译Android XML文件Python脚本
  3. android文件管理实现源码
  4. Android 最简单的SD卡文件遍历程序
  5. “AndroidManifest.xml 系统找不到指定的文件”解决方案
  6. Android资源文件mk的格式
  7. Android封装的HTTP请求组件

随机推荐

  1. SQL Server中的SQL语句优化与效率问题
  2. sql 聚集索引和非聚集索引(详细整理)
  3. SQL SERVER数据库重建索引的方法
  4. SQL Server 压缩日志与减少SQL Server 文
  5. 针对Sqlserver大数据量插入速度慢或丢失
  6. ms sql server中实现的unix时间戳函数(含
  7. sql 判断函数、存储过程是否存在的代码整
  8. SQL SERVER 2000通讯管道后复用劫持
  9. SQL Server 2000安全配置详解
  10. SQL Server出现System.OutOfMemoryExcept