Сенсорные технологии в AndroidTouch in Android

Во многом подобно iOS, Android создает объект, содержащий данные о физического взаимодействия пользователя с экрана – Android.View.MotionEvent объекта.Much like iOS, Android creates an object that holds data about the user's physical interaction with the screen – an Android.View.MotionEvent object. Этот объект содержит данные, например, какое действие выполняется, где заняло сенсорное устройство поместите, какое давление была применена, и т.д. Объект MotionEvent объект разбивает перемещения в следующие значения:This object holds data such as what action is performed, where the touch took place, how much pressure was applied, etc. A MotionEvent object breaks down the movement into to the following values:

  • Код действия, который описывает тип перемещения, такие как начальная touch, сенсорное устройство, перемещение между экрана или конечный сенсорного ввода.An action code that describes the type of motion, such as the initial touch, the touch moving across the screen, or the touch ending.

  • Набор значений оси, которые описывают позицию MotionEvent и другие свойства перемещения, например где сенсорное устройство, предпринимаются, когда выполнялась касание и какое давление использовался.A set of axis values that describe the position of the MotionEvent and other movement properties such as where the touch is taking place, when the touch took place, and how much pressure was used. Значения оси может отличаться в зависимости от устройства, поэтому приведенного выше списка не описывает все значения оси.The axis values may be different depending on the device, so the previous list does not describe all axis values.

MotionEvent Объект будет передаваться для соответствующего метода в приложении.The MotionEvent object will be passed to an appropriate method in an application. Существует три способа для приложения Xamarin.Android реагировать на событие сенсорного ввода:There are three ways for a Xamarin.Android application to respond to a touch event:

  • Назначьте обработчик событий для View.Touch - Android.Views.View класс имеет EventHandler<View.TouchEventArgs> приложения, которые можно назначить обработчик.Assign an event handler to View.Touch - The Android.Views.View class has an EventHandler<View.TouchEventArgs> which applications can assign a handler to. Такое поведение является типичным .NET.This is typical .NET behavior.

  • Реализация View.IOnTouchListener -экземпляры этого интерфейса может быть назначен объект представления, с помощью представления.Implementing View.IOnTouchListener - Instances of this interface may be assigned to a view object using the View. SetOnListener метод. Это функционально эквивалентно назначении обработчика событий к View.Touch событий.SetOnListener method.This is functionally equivalent to assigning an event handler to the View.Touch event. Если имеется несколько точек зрения может потребоваться, если они затронут логикой общими, он будет более эффективной, для создания класса и реализует этот метод, чтобы назначить каждое представление собственный обработчик событий.If there is some common or shared logic that many different views may need when they are touched, it will be more efficient to create a class and implement this method than to assign each view its own event handler.

  • Переопределить View.OnTouchEvent -всех представлений в Android подкласс Android.Views.View.Override View.OnTouchEvent - All views in Android subclass Android.Views.View. Когда возникает при просмотре представления, вызывает Android OnTouchEvent и передать его MotionEvent объект в качестве параметра.When a View is touched, Android will call the OnTouchEvent and pass it a MotionEvent object as a parameter.

Примечание

Не все устройства Android поддерживают сенсорных экранов.Not all Android devices support touch screens.

Добавив следующий тег в файл манифеста приводит к Google Play для отображения только приложения для тех устройств, которые являются поддержка сенсорного ввода:Adding the following tag to your manifest file causes Google Play to only display your app to those devices that are touch enabled:

<uses-configuration android:reqTouchScreen="finger" />

ЖестыGestures

Жест является фигурой нарисованные от руки на сенсорный экран.A gesture is a hand-drawn shape on the touch screen. Жест может иметь один или несколько штрихов, каждого штриха, состоящее из последовательности точек, созданных другой точки контакта с экрана.A gesture can have one or more strokes to it, each stroke consisting of a sequence of points created by a different point of contact with the screen. Android может поддерживать множество различных типов жесты, от простой посвященном по экрану на сложные жесты, включающие мультисенсорные.Android can support many different types of gestures, from a simple fling across the screen to complex gestures that involve multi-touch.

Android предоставляет Android.Gestures пространство имен специально для управления и реагирование на жесты.Android provides the Android.Gestures namespace specifically for managing and responding to gestures. В сердце все жесты — это специальный класс с именем Android.Gestures.GestureDetector.At the heart of all gestures is a special class called Android.Gestures.GestureDetector. Как и предполагает название, этот класс будет прослушивать жестов и события на основе MotionEvents предоставляемые операционной системой.As the name implies, this class will listen for gestures and events based on MotionEvents supplied by the operating system.

Чтобы реализовать обнаружения жестов, необходимо создать экземпляр действия GestureDetector класса и укажем экземпляр IOnGestureListener, как показано в следующем фрагменте кода:To implement a gesture detector, an Activity must instantiate a GestureDetector class and provide an instance of IOnGestureListener, as illustrated by the following code snippet:

GestureOverlayView.IOnGestureListener myListener = new MyGestureListener();
_gestureDetector = new GestureDetector(this, myListener);

Действие также необходимо реализовать OnTouchEvent и передать MotionEvent обнаружения жест.An Activity must also implement the OnTouchEvent and pass the MotionEvent to the gesture detector. В следующем фрагменте кода показан пример этого:The following code snippet shows an example of this:

public override bool OnTouchEvent(MotionEvent e)
{
    // This method is in an Activity
    return _gestureDetector.OnTouchEvent(e);
}

При создании экземпляра класса GestureDetector определяет жест интерес, оно уведомит действия или приложения при возникновении события либо посредством обратного вызова, предоставляемые GestureDetector.IOnGestureListener.When an instance of GestureDetector identifies a gesture of interest, it will notify the activity or application either by raising an event or through a callback provided by GestureDetector.IOnGestureListener. Этот интерфейс предоставляет шесть методов для различных жестов:This interface provides six methods for the various gestures:

  • OnDown — вызывается, когда происходит отвод, но не освобождается.OnDown - Called when a tap occurs but is not released.

  • OnFling — вызывается, когда посвященном происходит и предоставляет данные об начала и окончания сенсорное устройство, вызвавшей событие.OnFling - Called when a fling occurs and provides data on the start and end touch that triggered the event.

  • OnLongPress — вызывается, когда происходит последовательности при долгом нажатии.OnLongPress - Called when a long press occurs.

  • OnScroll -вызывается при возникновении события прокрутки.OnScroll - Called when a scroll event occurs.

  • OnShowPress - вызывается после возникновения OnDown и перемещения или не было выполнено событие.OnShowPress - Called after an OnDown has occurred and a move or up event has not been performed.

  • OnSingleTapUp — вызывается, когда происходит одним касанием.OnSingleTapUp - Called when a single tap occurs.

Во многих случаях приложения может быть заинтересован только в подмножестве жестов.In many cases applications may only be interested in a subset of gestures. В этом случае приложения должны расширять класс GestureDetector.SimpleOnGestureListener и переопределить методы, которые соответствуют событиям, которые их интересует.In this case, applications should extend the class GestureDetector.SimpleOnGestureListener and override the methods that correspond to the events that they are interested in.

Пользовательских жестовCustom Gestures

Жесты — это отличный способ пользователям взаимодействовать с приложением.Gestures are a great way for users to interact with an application. API-интерфейсы до сих обнаруженного было бы достаточно для простых жестов, но может потребовать немного обременительным для более сложных жестов.The APIs we have seen so far would suffice for simple gestures, but might prove a bit onerous for more complicated gestures. Чтобы помочь в более сложных жесты, Android предоставляет другой набор интерфейсов API в пространстве имен Android.Gestures, которая облегчит некоторые нагрузку, связанную с пользовательских жестов.To help with more complicated gestures, Android provides another set of API's in the Android.Gestures namespace that will ease some of the burden associated with custom gestures.

Создание пользовательских жестовCreating Custom Gestures

С момента Android 1.6 пакет SDK для Android поставляется с предварительно установленным в эмуляторе, вызывается построитель жесты приложения.Since Android 1.6, the Android SDK comes with an application pre-installed on the emulator called Gestures Builder. Это приложение позволяет разработчикам создавать предварительно определенных жестов, которые могут быть внедрены в приложении.This application allows a developer to create pre-defined gestures that can be embedded in an application. На следующем снимке экрана показан пример построителя жестов:The following screen shot shows an example of Gestures Builder:

Снимок экрана жесты построитель с жестами примерScreenshot of Gestures Builder with example gestures

Усовершенствованная версия этого приложения, программа жестов можно найти Google Play.An improved version of this application called Gesture Tool can be found Google Play. Жест оно очень похож жесты построитель за исключением того, что он позволяет проверить жесты, после их создания.Gesture Tool is very much like Gestures Builder except that it allows you to test gestures after they have been created. Этом далее снимке экрана показан построитель жестов:This next screenshot shows Gestures Builder:

Снимок экрана: жест средство, с помощью жестов примерScreenshot of Gesture Tool with example gestures

Средство жест более удобна для создания пользовательских жестов, так как оно обеспечивает жесты, проверяемое при их создании и легко доступен через Google Play.Gesture Tool is a bit more useful for creating custom gestures as it allows the gestures to be tested as they are being created and is easily available through Google Play.

Жест средство позволяет создавать жест путем рисования на экране и назначение имени.Gesture Tool allows you create a gesture by drawing on the screen and assigning a name. После создания жесты они сохраняются в двоичном файле на SD-карту устройства.After the gestures are created they are saved in a binary file on the SD card of your device. Этот файл должен быть полученные от устройства, а затем упаковываются вместе с приложением, в папку /Resources/raw.This file needs to be retrieved from the device, and then packaged with an application in the folder /Resources/raw. Этот файл можно получить из эмулятора с помощью моста отладки Android.This file can be retrieved from the emulator using the Android Debug Bridge. В следующем примере показано копирование файла из Galaxy Nexus каталог ресурсов приложения:The following example shows copying the file from a Galaxy Nexus to the Resource directory of an application:

$ adb pull /storage/sdcard0/gestures <projectdirectory>/Resources/raw

После получения файла он должен быть упакованной с приложением внутри directory /Resources/raw.Once you have retrieved the file it must be packaged with your application inside the directory /Resources/raw. Чтобы использовать этот файл жест проще для загрузки файла в GestureLibrary, как показано в следующем фрагменте:The easiest way to use this gesture file is to load the file into a GestureLibrary, as shown in the following snippet:

GestureLibrary myGestures = GestureLibraries.FromRawResources(this, Resource.Raw.gestures);
if (!myGestures.Load())
{
    // The library didn't load, so close the activity.
    Finish();
}

С помощью пользовательских жестовUsing Custom Gestures

Для распознавания пользовательских жестов в действии, он должен иметь Android.Gesture.GestureOverlay объект, добавленный к его макет.To recognize custom gestures in an Activity, it must have an Android.Gesture.GestureOverlay object added to its layout. В следующем фрагменте кода показано, как программным способом добавить GestureOverlayView действия:The following code snippet shows how to programmatically add a GestureOverlayView to an Activity:

GestureOverlayView gestureOverlayView = new GestureOverlayView(this);
gestureOverlayView.AddOnGesturePerformedListener(this);
SetContentView(gestureOverlayView);

В следующем фрагменте XML показано, как декларативно добавить GestureOverlayView:The following XML snippet shows how to add a GestureOverlayView declaratively:

<android.gesture.GestureOverlayView
    android:id="@+id/gestures"
    android:layout_width="match_parent "
    android:layout_height="match_parent" />

GestureOverlayView Имеет несколько событий, которые будут вызываться в процессе рисования жест.The GestureOverlayView has several events that will be raised during the process of drawing a gesture. Наиболее интересные событие GesturePerformed.The most interesting event is GesturePerformed. Это событие возникает после завершения рисования их жест пользователя.This event is raised when the user has completed drawing their gesture.

При возникновении этого события, действия запрашивает GestureLibrary попробовать и соответствует жест, созданной пользователем с помощью одного из жестов средством жест.When this event is raised, the Activity asks a GestureLibrary to try and match the gesture that the user with one of the gestures created by Gesture Tool. GestureLibrary Возвращает список объектов прогноза.GestureLibrary will return a list of Prediction objects.

Каждый объект прогноза содержит показатель и имя одного из жестов в GestureLibrary.Each Prediction object holds a score and name of one of the gestures in the GestureLibrary. Чем выше оценка, тем выше вероятность данный жест, с именем в прогноз соответствует жестов, нарисованного пользователем.The higher the score, the more likely the gesture named in the Prediction matches the gesture drawn by the user. Вообще говоря оценок, ниже, чем 1.0, считаются низкой совпадений.Generally speaking, scores lower than 1.0 are considered poor matches.

Следующий код является примером сопоставления жест:The following code shows an example of matching a gesture:

private void GestureOverlayViewOnGesturePerformed(object sender, GestureOverlayView.GesturePerformedEventArgs gesturePerformedEventArgs)
{
    // In this example _gestureLibrary was instantiated in OnCreate
    IEnumerable<Prediction> predictions = from p in _gestureLibrary.Recognize(gesturePerformedEventArgs.Gesture)
    orderby p.Score descending
    where p.Score > 1.0
    select p;
    Prediction prediction = predictions.FirstOrDefault();

    if (prediction == null)
    {
        Log.Debug(GetType().FullName, "Nothing matched the user's gesture.");
        return;
    }

    Toast.MakeText(this, prediction.Name, ToastLength.Short).Show();
}

Это сделано необходимо понимать, как использовать касания и жестов в приложениях Xamarin.Android.With this done, you should have an understanding of how to use touch and gestures in a Xamarin.Android application. Давайте теперь перейдем к Пошаговое руководство и концепциях в рабочий пример приложения.Let us now move on to a walkthrough and see all of the concepts in a working sample application.