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 -이벤트를 트리거한 시작 및 종료에 대 한 데이터를 제공 하 고 fling이 발생 하는 경우 호출 됩니다.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 -scroll 이벤트가 발생 하면 호출 됩니다.OnScroll - Called when a scroll event occurs.

  • Onshowpress 는 ondown이 발생 하 고 move 또는 up 이벤트가 수행 되지 않은 후에 호출 됩니다.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 클래스를 확장 하 고 관심이 있는 이벤트에 해당 하는 메서드를 재정의 해야 합니다.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. 제스처 네임 스페이스에 제공 합니다.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 이후 Android SDK는 제스처 작성기 라는 에뮬레이터에 미리 설치 된 응용 프로그램과 함께 제공 됩니다.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 Debug Bridge를 사용 하 여 에뮬레이터에서 검색할 수 있습니다.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/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

활동에서 사용자 지정 제스처를 인식 하려면 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.