歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android應用開發之手勢識別

Android應用開發之手勢識別

日期:2017/3/1 10:27:58   编辑:Linux編程

第一步:建立手勢庫

使用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. private final class GestureListener implements GestureOverlayView.OnGesturePerformedListener{
  18. @Override
  19. public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
  20. if(state){
  21. List<Prediction> predictions = mLibrary.recognize(gesture);//從手勢庫中查詢匹配的內容,匹配的結果可能包括多個相似的結果,匹配度高的結果放在最前面
  22. if(!predictions.isEmpty()){
  23. Prediction prediction = predictions.get(0);
  24. //prediction的score屬性代表了與手勢的相似程度
  25. //prediction的name代表手勢對應的名稱
  26. if(prediction.score > 1){
  27. addressText.setText(prediction.name);
  28. }
  29. }
  30. }
  31. }
  32. }
  33. }
Copyright © Linux教程網 All Rights Reserved