android创建手势识别示例代码

 更新时间:2014年01月24日 16:57:34   作者:  
使用一些浏览器或者输入法应用时会有一些手势操作,还可以自定义手势。这些神奇的操作是怎么做的呢?这一篇重点记录手势的识别和创建

这篇的内容使用到的是android.gesture包,具体的例子参考的是Sample中GestureBuilder程序。

1、手势创建
手势创建主要用到GestureOverlayView和GestureLibrary。GestureOverlayView的父类为android.widget.FrameLayout,是手势绘图区。GestureLibrary类主要对手势进行保存、删除等操作的,存放手势的仓库。下面给出创建手势的例子,如下图,可以定义如图手势打开csdn.net

1.1、创建绘图区

复制代码 代码如下:

 GestureOverlayView overlay = (GestureOverlayView) findViewById(R.id.gestures_overlay);

overlay.setGestureStrokeType(GestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE); 

overlay.setFadeOffset(2000);  //多笔画每两次的间隔时间
overlay.setGestureColor(Color.CYAN);//画笔颜色
overlay.setGestureStrokeWidth(6);//画笔粗细值

overlay.addOnGestureListener(new GesturesProcessor());

1.2、监听绘制

复制代码 代码如下:

 private class GesturesProcessor implements GestureOverlayView.OnGestureListener {
        public void onGestureStarted(GestureOverlayView overlay, MotionEvent event) {
            mDoneButton.setEnabled(false);
            mGesture = null;
        }

        public void onGesture(GestureOverlayView overlay, MotionEvent event) {
        }

        public void onGestureEnded(GestureOverlayView overlay, MotionEvent event) {
            mGesture = overlay.getGesture();
            if (mGesture.getLength() < LENGTH_THRESHOLD) {
                overlay.clear(false);
            }
            mDoneButton.setEnabled(true);
        }

        public void onGestureCancelled(GestureOverlayView overlay, MotionEvent event) {
        }
    }

1.3、保存手势

复制代码 代码如下:

 public void addGesture(View v) {
        if (mGesture != null) {
            final TextView input = (TextView) findViewById(R.id.gesture_name);
            final CharSequence name = input.getText();
            if (name.length() == 0) {
                input.setError(getString(R.string.error_missing_name));
                return;
            }

            /**
             * 获取手势库
             *   private final File mStoreFile = new File(Environment.getExternalStorageDirectory(), "gestures");
             *   GestureLibrary sStore = GestureLibraries.fromFile(mStoreFile);
             *
             */
            final GestureLibrary store = GestureBuilderActivity.getStore();
            store.addGesture(name.toString(), mGesture);
            store.save();

            setResult(RESULT_OK);

            final String path = new File(Environment.getExternalStorageDirectory(),
                    "gestures").getAbsolutePath();
            Toast.makeText(this, getString(R.string.save_success, path), Toast.LENGTH_LONG).show();
        } else {
            setResult(RESULT_CANCELED);
        }

        finish();

    }

2、手势识别

手势识别也是经过创建绘图区、监听绘制、比对结果三个过程,这里直接给出代码。

复制代码 代码如下:

public class GesturePerformedActivity extends Activity {

 private final File mStoreFile = new File(
   Environment.getExternalStorageDirectory(), "gestures");

 // 手势库
 GestureLibrary mGestureLib;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  // TODO Auto-generated method stub
  super.onCreate(savedInstanceState);

  setContentView(R.layout.gesture_perform);
  // 手势画板
  GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures_overlay);

  gestures.setGestureStrokeType(GestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE);

  gestures.setFadeOffset(2000); // 多笔画每两次的间隔时间
  gestures.setGestureColor(Color.CYAN);// 画笔颜色
  gestures.setGestureStrokeWidth(6);// 画笔粗细值

  // 手势识别的监听器
  gestures.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {
   @Override
   public void onGesturePerformed(GestureOverlayView overlay,
     Gesture gesture) {
    // 从手势库中查询匹配的内容,匹配的结果可能包括多个相似的结果,匹配度高的结果放在最前面
    ArrayList<Prediction> predictions = mGestureLib
      .recognize(gesture);  
    if (predictions.size() > 0) {
     Prediction prediction = (Prediction) predictions.get(0);
     // 匹配的手势
     if (prediction.score > 1.0) { // 越匹配score的值越大,最大为10
      Toast.makeText(GesturePerformedActivity.this,
        prediction.name, Toast.LENGTH_SHORT).show();
     }
    }
   }
  });

  if (mGestureLib == null) {
   mGestureLib = GestureLibraries.fromFile(mStoreFile);
   mGestureLib.load();
  }
 }

}



相关文章

  • android 下载时文件名是中文和空格会报错解决方案

    android 下载时文件名是中文和空格会报错解决方案

    项目中遇到了下载文件文件名是中文而且还有空格如果不对连接进行处理下载就会报错要想解决这个问题只需对你的url进行编码然后替换空格用编码表示,感兴趣的朋友可以详细了解下
    2013-01-01
  • Android仿Flipboard动画效果的实现代码

    Android仿Flipboard动画效果的实现代码

    这篇文章主要介绍了Android仿Flipboard动画效果的实现代码,本文图文并茂给大家介绍的非常详细,需要的朋友可以参考下
    2018-01-01
  • Android手势密码view学习笔记(二)

    Android手势密码view学习笔记(二)

    这篇文章主要为大家详细介绍了Android手势密码view的第二篇学习笔记,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • Android APK 32位和64位的区别及说明

    Android APK 32位和64位的区别及说明

    这篇文章主要介绍了Android APK 32位和64位的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Java操作Ant压缩和解压文件及批量打包Anroid应用

    Java操作Ant压缩和解压文件及批量打包Anroid应用

    这篇文章主要介绍了使用Java操作Ant压缩和解压文件以及批量打包Anroid应用的教程,Ant是一个自动化部署工具,用来处理zip和tar文件非常方便,需要的朋友可以参考下
    2016-02-02
  • 深入Android MediaPlayer的使用方法详解

    深入Android MediaPlayer的使用方法详解

    本篇文章是对Android中MediaPlayer的使用方法进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • Android 仿淘宝商品属性标签页

    Android 仿淘宝商品属性标签页

    这篇文章主要介绍了Android 仿淘宝商品属性标签页的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11
  • Android自定义view实现水波进度条控件

    Android自定义view实现水波进度条控件

    这篇文章主要为大家详细介绍了Android自定义view实现水波进度条控件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • 解析Android数据加密之异或加密算法

    解析Android数据加密之异或加密算法

    本篇文章主要介绍了Android数据加密之异或加密算法,现在分享给大家,也给大家做个参考。有兴趣的可以了解一下。
    2016-11-11
  • Android NDK开发(C语言--联合体与枚举)

    Android NDK开发(C语言--联合体与枚举)

    这篇文章主要介绍了Android NDK开发C语言联合体与枚举,共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。下面详细介绍该内容,需要的朋友可以参考一下
    2021-12-12

最新评论