Android - Gerakan

Android menyediakan jenis khusus acara layar sentuh seperti pinch, double tap, scrolls, long presses dan flinch. Ini semua dikenal sebagai isyarat.

Android menyediakan kelas GestureDetector untuk menerima peristiwa gerakan dan memberi tahu kami bahwa peristiwa ini sesuai dengan isyarat atau tidak. Untuk menggunakannya, Anda perlu membuat objek GestureDetector lalu memperluas kelas lain denganGestureDetector.SimpleOnGestureListeneruntuk bertindak sebagai pendengar dan mengganti beberapa metode. Sintaksnya diberikan di bawah ini -

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) {
   }
}

Menangani Gerakan Pinch

Android menyediakan ScaleGestureDetectorclass untuk menangani isyarat seperti mencubit dll. Untuk menggunakannya, Anda perlu membuat instance objek dari kelas ini. Sintaksnya adalah sebagai berikut -

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

Parameter pertama adalah konteks dan parameter kedua adalah event listener. Kita harus mendefinisikan pendengar acara dan mengganti fungsiOnTouchEventuntuk membuatnya bekerja. Sintaksnya diberikan di bawah ini -

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;
   }
}

Selain gerakan mencubit, ada metode lain yang tersedia untuk memberi tahu lebih banyak tentang peristiwa sentuh. Mereka tercantum di bawah ini -

Sr Tidak Metode & deskripsi
1

getEventTime()

Metode ini mendapatkan waktu acara dari acara saat ini sedang diproses ..

2

getFocusX()

Metode ini mendapatkan koordinat X dari titik fokus gerakan saat ini.

3

getFocusY()

Metode ini mendapatkan koordinat Y dari titik fokus gerakan saat ini.

4

getTimeDelta()

Metode ini mengembalikan perbedaan waktu dalam milidetik antara peristiwa penskalaan yang diterima sebelumnya dan peristiwa penskalaan saat ini.

5

isInProgress()

Metode ini mengembalikan nilai true jika isyarat skala sedang berlangsung ..

6

onTouchEvent(MotionEvent event)

Metode ini menerima MotionEvents dan mengirimkan peristiwa jika diperlukan.

Contoh

Berikut adalah contoh yang mendemonstrasikan penggunaan kelas ScaleGestureDetector. Ini menciptakan aplikasi dasar yang memungkinkan Anda memperbesar dan memperkecil melalui cubitan.

Untuk bereksperimen dengan contoh ini, Anda dapat menjalankannya di perangkat sebenarnya atau di emulator dengan layar sentuh aktif.

Langkah Deskripsi
1 Anda akan menggunakan studio Android untuk membuat aplikasi Android di bawah paket com.example.sairamkrishna.myapplication.
2 Ubah file src / MainActivity.java untuk menambahkan kode yang diperlukan.
3 Ubah res / layout / activity_main untuk menambahkan komponen XML masing-masing
4 Jalankan aplikasi dan pilih perangkat android yang sedang berjalan dan instal aplikasi di atasnya dan verifikasi hasilnya

Berikut adalah konten file aktivitas utama yang dimodifikasi 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;
      }
   }
}

Berikut ini adalah konten xml yang dimodifikasi res/layout/activity_main.xml.

Di sini abc menunjukkan logo 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>

Berikut ini adalah konten dari res/values/string.xml.

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

Berikut ini adalah konten dari AndroidManifest.xml mengajukan.

<?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>

Mari coba jalankan aplikasi Anda. Saya berasumsi bahwa Anda telah menghubungkan perangkat Seluler Android Anda yang sebenarnya dengan komputer Anda. Untuk menjalankan aplikasi dari Android studio, buka salah satu file aktivitas proyek Anda dan klik

ikon Run dari toolbar. Contoh outputnya harus seperti ini -

Sekarang letakkan saja dua jari di atas layar android, dan pisahkan satu bagian dan Anda akan melihat bahwa gambar android sedang diperbesar. Itu ditunjukkan pada gambar di bawah -

Sekarang letakkan lagi dua jari di atas layar android, dan coba tutup dan Anda akan melihat bahwa gambar android sekarang menyusut. Itu ditunjukkan pada gambar di bawah -