zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    最新Xcode7.x环境下上架iOS App到AppStore 完整流程
    rails提供的validators
    Ruby 符号【转】
    xaml学习笔记
    fedora安装rails缺少js runtime和cannot load such file -- sqlite3/sqlite3_native解决办法
    学习笔记——敏捷开发
    结队编程(电梯调度问题)
    【转】javascript操作Select标记中options集合
    【软件工程】Word frequency program
    【转】诗社之死
  • 原文地址:https://www.cnblogs.com/androidsj/p/3972813.html
Copyright © 2011-2022 走看看