Android-제스처

Android는 핀치, 두 번 탭, 스크롤, 길게 누르기 및 손가락 떼기와 같은 특별한 유형의 터치 스크린 이벤트를 제공합니다. 이것들은 모두 제스처로 알려져 있습니다.

Android는 동작 이벤트를 수신하고 이러한 이벤트가 제스처에 해당하는지 여부를 알려주는 GestureDetector 클래스를 제공합니다. 그것을 사용하려면 GestureDetector의 개체를 만든 다음 다른 클래스를GestureDetector.SimpleOnGestureListener리스너 역할을하고 일부 메서드를 재정의합니다. 구문은 다음과 같습니다.

GestureDetector myG;
myG = new GestureDetector(this,new Gesture());
   
class Gesture extends GestureDetector.SimpleOnGestureListener{
   public boolean onSingleTapUp(MotionEvent ev) {
   }
   
   public void onLongPress(MotionEvent ev) {
   }
   
   public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
   float distanceY) {
   }
   
   public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
   float velocityY) {
   }
}

핀치 제스처 처리

Android는 ScaleGestureDetector핀치 등의 제스처를 처리하는 클래스를 사용하려면이 클래스의 객체를 인스턴스화해야합니다. 구문은 다음과 같습니다.

ScaleGestureDetector SGD;
SGD = new ScaleGestureDetector(this,new ScaleListener());

첫 번째 매개 변수는 컨텍스트이고 두 번째 매개 변수는 이벤트 리스너입니다. 이벤트 리스너를 정의하고 함수를 재정의해야합니다.OnTouchEvent작동하도록합니다. 구문은 다음과 같습니다.

public boolean onTouchEvent(MotionEvent ev) {
   SGD.onTouchEvent(ev);
   return true;
}

private class ScaleListener extends ScaleGestureDetector.SimpleOnScaleGestureListener {
   @Override
   public boolean onScale(ScaleGestureDetector detector) {
      float scale = detector.getScaleFactor();
      return true;
   }
}

핀치 제스처 외에도 터치 이벤트에 대해 더 많이 알리는 다른 방법이 있습니다. 그들은 아래에 나열되어 있습니다-

Sr. 아니요 방법 및 설명
1

getEventTime()

이 메서드는 처리중인 현재 이벤트의 이벤트 시간을 가져옵니다.

2

getFocusX()

이 메서드는 현재 제스처 초점의 X 좌표를 가져옵니다.

getFocusY()

이 메서드는 현재 제스처 초점의 Y 좌표를 가져옵니다.

4

getTimeDelta()

이 메서드는 이전에 허용 된 조정 이벤트와 현재 조정 이벤트 사이의 시간 차이 (밀리 초)를 반환합니다.

5

isInProgress()

이 메서드는 크기 조정 동작이 진행중인 경우 true를 반환합니다.

6

onTouchEvent(MotionEvent event)

이 메서드는 MotionEvents를 받아들이고 적절한 경우 이벤트를 전달합니다.

다음은 ScaleGestureDetector 클래스의 사용을 보여주는 예입니다. 핀치를 통해 확대 및 축소 할 수있는 기본 응용 프로그램을 만듭니다.

이 예제를 실험하기 위해 실제 기기 또는 터치 스크린이 활성화 된 에뮬레이터에서 실행할 수 있습니다.

단계 기술
1 Android 스튜디오를 사용하여 com.example.sairamkrishna.myapplication 패키지 아래에 Android 애플리케이션을 만듭니다.
2 src / MainActivity.java 파일을 수정하여 필요한 코드를 추가합니다.
res / layout / activity_main을 수정하여 각 XML 구성 요소를 추가하십시오.
4 애플리케이션을 실행하고 실행중인 Android 기기를 선택하고 여기에 애플리케이션을 설치하고 결과를 확인합니다.

다음은 수정 된 주요 활동 파일의 내용입니다. src/MainActivity.java.

package com.example.sairamkrishna.myapplication;

import android.app.Activity;
import android.graphics.Matrix;
import android.os.Bundle;

import android.view.MotionEvent;
import android.view.ScaleGestureDetector;
import android.widget.ImageView;

public class MainActivity extends Activity {
   private ImageView iv;
   private Matrix matrix = new Matrix();
   private float scale = 1f;
   private ScaleGestureDetector SGD;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      iv=(ImageView)findViewById(R.id.imageView);
      SGD = new ScaleGestureDetector(this,new ScaleListener());
   }

   public boolean onTouchEvent(MotionEvent ev) {
      SGD.onTouchEvent(ev);
      return true;
   }

   private class ScaleListener extends ScaleGestureDetector.
      SimpleOnScaleGestureListener {
      
      @Override
      public boolean onScale(ScaleGestureDetector detector) {
         scale *= detector.getScaleFactor();
         scale = Math.max(0.1f, Math.min(scale, 5.0f));
         matrix.setScale(scale, scale);
         iv.setImageMatrix(matrix);
         return true;
      }
   }
}

다음은 xml의 수정 된 내용입니다. res/layout/activity_main.xml.

여기서 abc는 tutorialspoint의 로고를 나타냅니다.
<RelativeLayout 
   xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools" 
   android:layout_width="match_parent"
   android:layout_height="match_parent" 
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" 
   tools:context=".MainActivity" >
   
   <TextView android:text="Gestures  
      Example" android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/textview"
      android:textSize="35dp"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials point"
      android:id="@+id/textView"
      android:layout_below="@+id/textview"
      android:layout_centerHorizontal="true"
      android:textColor="#ff7aff24"
      android:textSize="35dp" />
      
   <ImageView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/imageView"
      android:src="@drawable/abc"
      android:scaleType="matrix"
      android:layout_below="@+id/textView"
      android:layout_alignParentLeft="true"
      android:layout_alignParentStart="true"
      android:layout_alignParentBottom="true"
      android:layout_alignParentRight="true"
      android:layout_alignParentEnd="true" />
      
</RelativeLayout>

다음은의 내용입니다 res/values/string.xml.

<resources>
   <string name="app_name>My Application</string>
</resources>

다음은 내용입니다 AndroidManifest.xml 파일.

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.example.sairamkrishna.myapplication" >

   <application
      android:allowBackup="true"
      android:icon="@drawable/ic_launcher"
      android:label="@string/app_name"
      android:theme="@style/AppTheme" >
      
      <activity
         android:name="com.example.sairamkrishna.myapplicationMainActivity"
         android:label="@string/app_name" >
         
         <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
         </intent-filter>
         
      </activity>
   
   </application>
</manifest>

애플리케이션을 실행 해 보겠습니다. 실제 Android 모바일 장치를 컴퓨터에 연결했다고 가정합니다. Android 스튜디오에서 앱을 실행하려면 프로젝트의 활동 파일 중 하나를 열고

툴바에서 실행 아이콘을 클릭 합니다. 샘플 출력은 다음과 같아야합니다.

이제 Android 화면 위에 두 손가락을 놓고 부분을 분리하면 Android 이미지가 확대되고 있음을 알 수 있습니다. 아래 이미지에 나와 있습니다.

이제 다시 두 손가락을 Android 화면 위에 놓고 닫으십시오. 이제 Android 이미지가 축소되는 것을 볼 수 있습니다. 아래 이미지에 나와 있습니다.