17、手势(Gesture)

课程目标:

学习Android必不可少的手势的功能 

了解手势识别原理 , 掌握制作,加载以及识别手势

写出自己的手势Demo

重点难点:手势机制的了解     手势库的制作

考核目标:请说一下手势库的机制 ,同时类似推演语音识别机制

 

二、手势的原理

(1)使用GuesturesBuilder创建手势库

    生成手势文件到:/sdcard/gestures

(2)加载手势库

把生成的文件放到res/raw下面,这就是手势库文件,供加载匹配

mLibrary = GestureLibraries.fromRawResource(this, R.raw.spells);

if (!mLibrary.load()) {

    finish();

}

(3)识别手势

 1 1,
 2 <android.gesture.GestureOverlayView
 3     android:id="@+id/gestures"
 4     android:layout_width="fill_parent" 
 5     android:layout_height="0dip"
 6     android:layout_weight="1.0" />
 7 2,
 8 GestureOverlayView gestures = (GestureOverlayView)
 9    findViewById(R.id.gestures);
10 gestures.addOnGesturePerformedListener(this);
11 
12 3,
13 public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
14     ArrayList<prediction> predictions = mLibrary.recognize(gesture);
15 
16     // We want at least one prediction
17     if (predictions.size() > 0) {
18         Prediction prediction = predictions.get(0);
19         // We want at least some confidence in the result
20         if (prediction.score > 1.0) {
21             // Show the spell
22             Toast.makeText(this, prediction.name, Toast.LENGTH_SHORT).show();
23         }
24     }
25 }

(4)Gestures overlay

【自己独立View识别】

 

【嵌套其它View】

 1 And here is what the XML layout looks like:
 2 
 3 <android.gesture.GestureOverlayView
 4     xmlns:android="http://schemas.android.com/apk/res/android"
 5     android:id="@+id/gestures"
 6     android:layout_width="fill_parent"
 7     android:layout_height="fill_parent"
 8     
 9     android:gestureStrokeType="multiple"
10     android:eventsInterceptionEnabled="true"
11     android:orientation="vertical">
12 
13     <ListView
14         android:id="@android:id/list"  
15         android:layout_width="fill_parent" 
16         android:layout_height="fill_parent"  />
17 
18 </android.gesture.GestureOverlayView>
19 In this application, the gestures view is an overlay on top of a regular ListView. The overlay also specifies a few properties that we did not need before:
20 
21 gestureStrokeType: indicates whether we want to recognize gestures made of a single stroke or multiple strokes. Since one of our gestures is the "+" symbol, we need multiple strokes
22 eventsInterceptionEnabled: when set to true, this property tells the overlay to steal the events from its children as soon as it knows the user is really drawing a gesture. This is useful when there's a scrollable view under the overlay, to avoid scrolling the underlying child as the user draws his gesture
23 orientation: indicates the scroll orientation of the views underneath. In this case the list scrolls vertically, which means that any horizontal gestures (like action_delete) can immediately be recognized as a gesture. Gestures that start with a vertical stroke must contain at least one horizontal component to be recognized. In other words, a simple vertical line cannot be recognized as a gesture since it would conflict with the list's scrolling.
24 The code used to load and set up the gestures library and overlay is exactly the same as before. The only difference is that we now check the name of the predictions to know what the user intended to do:
25 
26 public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
27     ArrayList<Prediction> predictions = mLibrary.recognize(gesture);
28     if (predictions.size() > 0 && predictions.get(0).score > 1.0) {
29         String action = predictions.get(0).name;
30         if ("action_add".equals(action)) {
31             Toast.makeText(this, "Adding a contact", Toast.LENGTH_SHORT).show();
32         } else if ("action_delete".equals(action)) {
33 Toast.makeText(this, "Removing a contact",
34    Toast.LENGTH_SHORT).show();
35         } else if ("action_refresh".equals(action)) {
36 Toast.makeText(this, "Reloading contacts",
37  Toast.LENGTH_SHORT).show();
38         }
39     }
40 }

三、Case:练习手势的制作以及加载和识别

GestureLibrary store = GestureLibraries

.fromFile("/sdcard/gestures");

store.addGesture(textView.getText().toString(), gesture);

store.save(); 

四、Sample&Case:实现手势来跳转Activity

通过手势来跳转Activity

建立5个Activity ,分别放置一张大图 

向右滑动是下一个Activity ,向左滑动是上一个Activity ,向上滑动是到第一个Activity , 向下滑动是到最后一个Activity

 

转载于:https://www.cnblogs.com/androidsj/p/3972813.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值