Android 터치Touch 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:

  • 초기 터치 화면 또는 터치 끝 간에 이동 터치 같은 동작의 형식을 설명 하는 작업 코드입니다.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. 이 인터페이스는 다양 한 제스처에 대해 6 가지 메서드를 제공합니다.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는 사용자 지정 제스처와 관련 된 부담을 용이 하 게 하는 Android.Gestures 네임 스페이스에 다른 API의 집합을 제공 합니다.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 SDK Android 1.6 이후 응용 프로그램 제스처 Builder 라는 에뮬레이터에 미리 설치 되어 제공 됩니다.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

파일을 검색 한 후 디렉터리 /Resources 내 응용 프로그램과 함께 패키지/원시 이어야 합니다.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.