Цель лабораторной работы:
Разработка приложения, помогающего понять принципы работы c жестами вводимыми пользователями.
Задачи лабораторной работы:
Начиная с версии 1.6, Android предоставляет API для работы с жестами, который располагается в пакете android.gesture и позволяет сохранять, загружать, создавать и распознавать жесты.
В данной работе рассмотрим процесс создания набора жестов, для создания жестов будем использовать приложение Gesture Builder, которое предустановлено на виртуальные устройства Android (AVD), начиная с версии 1.6.
После этого разработаем приложение, в котором предполагается распознавание и использование созданных жестов.
Для начала создадим новое приложение.
Далее запустим эмулятор и используем приложение Gesture Builder для создания жестов "1", "2" и "S". Жест всегда связан с именем, но имя не обязательно должно быть уникальным, в действительности, для повышения точности в распознавании жеста рекомендуется сохранять несколько жестов с одним и тем же именем.
На рис 11.1 можно увидеть приложение Gesture Builder в работе, чтобы добавить жест, необходимо нажать на кнопку .
Жесты сохраняются на SD карте эмулятора, чтобы использовать их в приложении необходимо импортировать файл жестов в проект.
(рис 11.1) Создание жестов с помощью приложения Gesture Builder
(рис 11.2) Набор жестов, созданных в приложении Gesture Builder
Комментарий: Gesture Builder может сообщить, что ему некуда сохранять жесты, в этом случае необходимо запустить эмулятор с образом SD карты.
Сначала образ нужно создать с помощью утилиты mksdcard (расположена в папке <AndrSDK>/sdk/tools, где <AndrSDK> - путь, куда установлен Android SDK). В командной строке напишем:
mksdcard -l mySdCard 64M gesture.img
Следующим шагом будет создать и запустить эмулятор с образом gesture.img, для этого зайдем в папку <AndrSDK>/sdk/tools и выполним команду:
emulator -avd nameEmulator -sdcard gestures.img
nameEmulator - имя, которое присвоено эмулятору при создании.
Интересная статья на эту тему по ссылке: http://habrahabr.ru/post/120016/
Каждый раз, когда мы создаем или редактируем жесты с помощью Gesture Builder, создается файл gestures на SD карте эмулятора. Необходимо импортировать этот файл в директорию res/raw/, созданного проекта, в котором планируем использовать жесты.
(рис 11.3) Расположение файла gestures
Самый простой способ импортировать жесты в проект заключается использовании вкладки показана вкладка File Explorer в компоновке DDMS.
Чтобы скопировать файл жестов с эмулятора в проект, необходимо выбрать его и нажать кнопку " красным подобием окружности. Откроется диалог с предложением выбрать папку, в которую необходимо скопировать жесты, здесь надо найти папку проекта, в ней папку res/raw/ (если папки raw/ нет, ее необходимо создать) и нажать кнопку Сохранить. Теперь жесты есть в нашем проекте и их можно использовать.
Для распознавания жестов необходимо добавить элемент :
(рис 11.4) XML файл активности приложения, элемент GestureOverlayView обычный компонент интерфейса пользователя
Можно добавить элемент .
(рис 11.5) XML файл активности приложения, элемент GestureOverlayView поверх всех компонентов интерфейса пользователя
Далее необходимо обработать ввод жеста пользователя, сравнить с загруженными жестами, и либо определить жест, либо сообщить пользователю, что такого жеста нет. Теперь вся работа будет выполняться в java файле, описывающем главную (и единственную) активность приложения. Внесем в этот класс следующие дополнения:
OnGesturePerformedListener, для этого в объявление класса добавим конструкцию:
implements OnGesturePerformedListener;
GestureLibrary и GestureOverlayView, поэтому в качестве полей класса активности объявим следующие переменные:
GestureLibrary gLib;
GestureOverlayView gestures;
onCreate() выполним следующие действия:
gLib = GestureLibraries.fromRawResource(this, R.raw.gestures);
if (!gLib.load()) {
finish();
}
В первой строке выполнена инициализация переменной gLib жестами, загруженными из файла gestures папки res/raw/.
Оператор if выполняет проверку загружены ли жесты, если нет, выполняется выход из приложения.
onCreate() еще две строчки:
gestures = (GestureOverlayView) findViewById(R.id.gestureOverlayView1);
gestures.addOnGesturePerformedListener(this);
Для инициализации переменной gesture и подключения к ней слушателя событий появления жеста.
OnGesturePerformed(), который и будет вызываться при появлении события, соответствующего какому-либо жесту.
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
//Создаёт ArrayList c загруженными из gestures жестами
ArrayList<Prediction> predictions = gLib.recognize(gesture);
if (predictions.size() > 0) {
//если загружен хотябы один жест из gestures
Prediction prediction = predictions.get(0);
if (prediction.score > 1.0) {
if (prediction.name.equals("one"))
tvOut.setText("1");
else if (prediction.name.equals("stop"))
tvOut.setText("stop");
else if (prediction.name.equals("two"))
tvOut.setText("2");
}else{
tvOut.setText("Жест неизвестен");
}
}
}
В приложении всего лишь распознаются жесты и в информационное поле выводится информация о том, что за жест был использован. В листинге 11.1 представлен возможный код приложения.
В качестве практического задания предлагаем реализовать жестами ввод чисел в приложении "Угадайка", разработанном в лабораторной работе второй темы. Создать жесты "0", "1", "2", "3", "4", "5", "6", "7", "8", "9" для ввода цифр и жест "S" для остановки ввода числа. В приложение добавить распознавание этих жестов, преобразование их в число и сравнение полученного числа с загаданным.
Еще варианты для самостоятельной работы:
package com.example.lab5_2_gestures;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.gesture.Gesture;
import android.gesture.GestureLibraries;
import android.gesture.GestureLibrary;
import android.gesture.GestureOverlayView;
import android.gesture.GestureOverlayView.OnGesturePerformedListener;
import android.gesture.Prediction;
import android.view.Menu;
import android.widget.TextView;
public class Gestures extends Activity implements OnGesturePerformedListener{
GestureLibrary gLib;
GestureOverlayView gestures;
TextView tvOut;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_gestures);
tvOut=(TextView)findViewById(R.id.textView1);
//Загрузка жестов (gestures) из res/raw/gestures
gLib = GestureLibraries.fromRawResource(this, R.raw.gestures);
if (!gLib.load()) {
//Если жесты не загружены, то выход из приложения
finish();
}
gestures = (GestureOverlayView) findViewById(R.id.gestureOverlayView1);
gestures.addOnGesturePerformedListener(this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.gestures, menu);
return true;
}
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
//Создаёт ArrayList c загруженными из gestures жестами
ArrayList<Prediction> predictions = gLib.recognize(gesture);
if (predictions.size() > 0) {
//если загружен хотя бы один жест из gestures
Prediction prediction = predictions.get(0);
if (prediction.score > 1.0) {
if (prediction.name.equals("one"))
tvOut.setText("1");
else if (prediction.name.equals("stop"))
tvOut.setText("stop");
else if (prediction.name.equals("two"))
tvOut.setText("2");
}else{
tvOut.setText("Жест неизвестен");
}
}
}
}
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.