第一步:建立手勢庫
使用SDK自帶例子GestureBuilder建立手勢庫(位置:Android-sdk-windows\samples\android-8\GestureBuilder)。使用GestureBuilder之前,你需要恢復其到開發環境,然後進行編繹並部署到手機上。此時,就可以使用GestureBuilder建立手勢庫,生成的手勢庫文件在SCDard上,默認文件名稱為:gestures
第二步:在應用中加載手勢庫文件,然後開發手勢識別代碼。
把手勢庫文件gestures文件拷貝到項目的res/raw目錄下。然後在布局文件中添加用於手勢繪制的View:
- <android.gesture.GestureOverlayView
- android:id="@+id/gestures"
- android:layout_width="fill_parent“ android:layout_height="0dip"
- 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"
手勢識別代碼
- public class MainActivity extends Activity {
- private GestureOverlayView gestureOverlayView;
- private GestureLibrary mLibrary;
- private boolean state;
- private EditText addressText;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- addressText = (EditText)this.findViewById(R.id.address);
- gestureOverlayView = (GestureOverlayView)this.findViewById(R.id.gestures);
- //當用戶完成一次Gesture繪制後,系統將自動調用Listener對象的onGesturePerformed()方法
- gestureOverlayView.addOnGesturePerformedListener(new GestureListener());
- mLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures);
- state = mLibrary.load();//加載手勢庫
- }
-
- private final class GestureListener implements GestureOverlayView.OnGesturePerformedListener{
- @Override
- public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
- if(state){
- List<Prediction> predictions = mLibrary.recognize(gesture);//從手勢庫中查詢匹配的內容,匹配的結果可能包括多個相似的結果,匹配度高的結果放在最前面
- if(!predictions.isEmpty()){
- Prediction prediction = predictions.get(0);
- //prediction的score屬性代表了與手勢的相似程度
- //prediction的name代表手勢對應的名稱
- if(prediction.score > 1){
- addressText.setText(prediction.name);
- }
- }
- }
- }
- }
- }