zoukankan      html  css  js  c++  java
  • android手势创建及识别

    文章来源:http://www.cnblogs.com/android100/p/android-hand.html

    源码:http://files.cnblogs.com/android100/gesture.builder.zip

        使用一些浏览器或者输入法应用时会有一些手势操作,还可以自定义手势。这些神奇的操作是怎么做的呢?这一篇重点记录手势的识别和创建。这篇的内容使用到的是android.gesture包,具体的例子参考的是Sample中GestureBuilder程序。

     

    1、手势创建

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

     


    1.1、创建绘图区

     
    1. GestureOverlayView overlay = (GestureOverlayView) findViewById(R.id.gestures_overlay);  
    2.        
    3.        overlay.setGestureStrokeType(GestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE);    
    4.       
    5.        overlay.setFadeOffset(2000);  //多笔画每两次的间隔时间  
    6.        overlay.setGestureColor(Color.CYAN);//画笔颜色  
    7.        overlay.setGestureStrokeWidth(6);//画笔粗细值  
    8.          
    9.        overlay.addOnGestureListener(new GesturesProcessor());  

     

    1.2、监听绘制

     
    1. private class GesturesProcessor implements GestureOverlayView.OnGestureListener {  
    2.        public void onGestureStarted(GestureOverlayView overlay, MotionEvent event) {  
    3.            mDoneButton.setEnabled(false);  
    4.            mGesture = null;  
    5.        }  
    6.   
    7.        public void onGesture(GestureOverlayView overlay, MotionEvent event) {  
    8.        }  
    9.   
    10.        public void onGestureEnded(GestureOverlayView overlay, MotionEvent event) {  
    11.            mGesture = overlay.getGesture();  
    12.            if (mGesture.getLength() < LENGTH_THRESHOLD) {  
    13.                overlay.clear(false);  
    14.            }  
    15.            mDoneButton.setEnabled(true);  
    16.        }  
    17.   
    18.        public void onGestureCancelled(GestureOverlayView overlay, MotionEvent event) {  
    19.        }  
    20.    }  

     

    1.3、保存手势

    1. public void addGesture(View v) {  
    2.        if (mGesture != null) {  
    3.            final TextView input = (TextView) findViewById(R.id.gesture_name);  
    4.            final CharSequence name = input.getText();  
    5.            if (name.length() == 0) {  
    6.                input.setError(getString(R.string.error_missing_name));  
    7.                return;  
    8.            }  
    9.   
    10.            /** 
    11.             * 获取手势库 
    12.             *   private final File mStoreFile = new File(Environment.getExternalStorageDirectory(), "gestures"); 
    13.             *   GestureLibrary sStore = GestureLibraries.fromFile(mStoreFile); 
    14.             *  
    15.             */  
    16.            final GestureLibrary store = GestureBuilderActivity.getStore();  
    17.            store.addGesture(name.toString(), mGesture);  
    18.            store.save();  
    19.   
    20.            setResult(RESULT_OK);  
    21.   
    22.            final String path = new File(Environment.getExternalStorageDirectory(),  
    23.                    "gestures").getAbsolutePath();  
    24.            Toast.makeText(this, getString(R.string.save_success, path), Toast.LENGTH_LONG).show();  
    25.        } else {  
    26.            setResult(RESULT_CANCELED);  
    27.        }  
    28.   
    29.        finish();  
    30.          
    31.    }  


    2、手势识别

    手势识别也是经过创建绘图区、监听绘制、比对结果三个过程,这里直接给出代码。
    1. public class GesturePerformedActivity extends Activity {  
    2.   
    3.     private final File mStoreFile = new File(  
    4.             Environment.getExternalStorageDirectory(), "gestures");  
    5.   
    6.     // 手势库  
    7.     GestureLibrary mGestureLib;  
    8.   
    9.     @Override  
    10.     protected void onCreate(Bundle savedInstanceState) {  
    11.         // TODO Auto-generated method stub  
    12.         super.onCreate(savedInstanceState);  
    13.   
    14.         setContentView(R.layout.gesture_perform);  
    15.         // 手势画板  
    16.         GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures_overlay);  
    17.   
    18.         gestures.setGestureStrokeType(GestureOverlayView.GESTURE_STROKE_TYPE_MULTIPLE);  
    19.   
    20.         gestures.setFadeOffset(2000); // 多笔画每两次的间隔时间  
    21.         gestures.setGestureColor(Color.CYAN);// 画笔颜色  
    22.         gestures.setGestureStrokeWidth(6);// 画笔粗细值  
    23.   
    24.         // 手势识别的监听器  
    25.         gestures.addOnGesturePerformedListener(new GestureOverlayView.OnGesturePerformedListener() {  
    26.             @Override  
    27.             public void onGesturePerformed(GestureOverlayView overlay,  
    28.                     Gesture gesture) {  
    29.                 // 从手势库中查询匹配的内容,匹配的结果可能包括多个相似的结果,匹配度高的结果放在最前面  
    30.                 ArrayList<Prediction> predictions = mGestureLib  
    31.                         .recognize(gesture);      
    32.                 if (predictions.size() > 0) {  
    33.                     Prediction prediction = (Prediction) predictions.get(0);  
    34.                     // 匹配的手势  
    35.                     if (prediction.score > 1.0) { // 越匹配score的值越大,最大为10  
    36.                         Toast.makeText(GesturePerformedActivity.this,  
    37.                                 prediction.name, Toast.LENGTH_SHORT).show();  
    38.                     }  
    39.                 }  
    40.             }  
    41.         });  
    42.   
    43.         if (mGestureLib == null) {  
    44.             mGestureLib = GestureLibraries.fromFile(mStoreFile);  
    45.             mGestureLib.load();  
    46.         }  
    47.     }  
    48.   
    49. }  

                           
  • 相关阅读:
    Sample XPS Documents Download
    触发器中的inserted表和deleted表
    Using freewheel.labs.autodesk.com to auto generate preview images of DWF files on your web site
    解除SQL对组件"Ad Hoc Distributed Queries"的"STATEMENT'OpenRowset OpenDatasource"的访问
    读写xps
    XPS文件,在Windows XP下的打开查看阅读和打印方法。
    Learning to Reference Inserted and Deleted Tables
    Get value from updated, inserted and deleted
    Reinstall Microsoft Helper Viewer
    如何查找文件的IFilter
  • 原文地址:https://www.cnblogs.com/Miami/p/3443057.html
Copyright © 2011-2022 走看看