歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Android應用開發之手勢識別

第一步:建立手勢庫

使用SDK自帶例子GestureBuilder建立手勢庫(位置:Android-sdk-windows\samples\android-8\GestureBuilder)。使用GestureBuilder之前,你需要恢復其到開發環境,然後進行編繹並部署到手機上。此時,就可以使用GestureBuilder建立手勢庫,生成的手勢庫文件在SCDard上,默認文件名稱為:gestures

第二步:在應用中加載手勢庫文件,然後開發手勢識別代碼。

把手勢庫文件gestures文件拷貝到項目的res/raw目錄下。然後在布局文件中添加用於手勢繪制的View:

  1. <android.gesture.GestureOverlayView  
  2.    android:id="@+id/gestures"  
  3.    android:layout_width="fill_parent“ android:layout_height="0dip"  
  4.    android:layout_weight="1.0" />  

為View添加手勢監聽事件:gestureOverlayView.addOnGesturePerformedListener();

得到手勢庫:mLibrary =GestureLibraries.fromRawResource(this, R.raw.gestures);

加載手勢庫:mLibrary.load();

List<Prediction>predictions = mLibrary.recognize(gesture);//從手勢庫中查詢匹配的內容,匹配的結果可能包括多個相似的內容,匹配度高的結果放在最前面

大多數情況下,手勢都是通過一筆完成。然而有一些特別的需求就需要通過多個筆畫來實現,這時可以使用gestureStrokeType屬性進行設置:android:gestureStrokeType="multiple"

手勢識別代碼

  1. public class MainActivity extends Activity {  
  2.     private GestureOverlayView gestureOverlayView;  
  3.     private GestureLibrary mLibrary;  
  4.     private boolean state;  
  5.     private EditText addressText;  
  6.     @Override  
  7.     public void onCreate(Bundle savedInstanceState) {  
  8.         super.onCreate(savedInstanceState);  
  9.         setContentView(R.layout.main);  
  10.         addressText = (EditText)this.findViewById(R.id.address);  
  11.         gestureOverlayView = (GestureOverlayView)this.findViewById(R.id.gestures);  
  12.         //當用戶完成一次Gesture繪制後,系統將自動調用Listener對象的onGesturePerformed()方法   
  13.         gestureOverlayView.addOnGesturePerformedListener(new GestureListener());  
  14.         mLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures);  
  15.         state = mLibrary.load();//加載手勢庫   
  16.     }  
  17.       
  18.     private final class GestureListener implements GestureOverlayView.OnGesturePerformedListener{  
  19.         @Override  
  20.         public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {  
  21.             if(state){  
  22.                 List<Prediction> predictions = mLibrary.recognize(gesture);//從手勢庫中查詢匹配的內容,匹配的結果可能包括多個相似的結果,匹配度高的結果放在最前面   
  23.                 if(!predictions.isEmpty()){  
  24.                     Prediction prediction = predictions.get(0);  
  25.                     //prediction的score屬性代表了與手勢的相似程度   
  26.                     //prediction的name代表手勢對應的名稱   
  27.                     if(prediction.score > 1){  
  28.                         addressText.setText(prediction.name);  
  29.                     }  
  30.                 }  
  31.             }  
  32.         }  
  33.     }  
  34. }  
Copyright © Linux教程網 All Rights Reserved