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

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();


上面画了一个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如何往SDCard中存取图片
  2. 【笔记】android捕获触摸事件
  3. Android中实现滑动翻页—使用ViewFlipper
  4. Android处理手势识别的解决方法(左右滑动)
  5. android如何往SDCard中存取图片
  6. android之纵横屏幕切换时保存数据
  7. Android(安卓)代码片段---从相册或相机获取图片保存并处理
  8. Android(安卓)view手势缩放与移动
  9. Android(安卓)DrawBitmap绘制图像

随机推荐

  1. 5 枚 Android 风格的 Chrome 主题
  2. 实现了在android实现左右滑动切换界面的
  3. Android(安卓)v4包下的PagerTitleStrip,Vi
  4. android横竖屏 用法总结
  5. 使用ProgressBar实现进度条
  6. Android 通过python实现自动化构建打包上
  7. 设置环境变量ANDROID_SDK_HOME有什么用?
  8. 使用android上传文件
  9. PreferenceActivity的使用 android
  10. 获取Android的Java源代码并在Eclipse中关