Android - Gesti

Android fornisce tipi speciali di eventi touchscreen come pizzicare, toccare due volte, scorrere, premere a lungo e indietreggiare. Questi sono tutti noti come gesti.

Android fornisce la classe GestureDetector per ricevere eventi di movimento e comunicarci che questi eventi corrispondono o meno ai gesti. Per usarlo, è necessario creare un oggetto di GestureDetector e quindi estendere un'altra classe conGestureDetector.SimpleOnGestureListeneragire da ascoltatore e sovrascrivere alcuni metodi. La sua sintassi è data di seguito:

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

Gestire il gesto di pizzicamento

Android fornisce ScaleGestureDetectorclass per gestire gesti come pizzicare ecc. Per usarlo, è necessario istanziare un oggetto di questa classe. La sua sintassi è la seguente:

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

Il primo parametro è il contesto e il secondo parametro è il listener di eventi. Dobbiamo definire il listener di eventi e sovrascrivere una funzioneOnTouchEventper farlo funzionare. La sua sintassi è data di seguito:

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

Oltre ai gesti di pizzicamento, sono disponibili altri metodi che notificano di più sugli eventi di tocco. Sono elencati di seguito:

Suor n Metodo e descrizione
1

getEventTime()

Questo metodo ottiene l'ora dell'evento in corso di elaborazione.

2

getFocusX()

Questo metodo ottiene la coordinata X del punto focale del gesto corrente.

3

getFocusY()

Questo metodo ottiene la coordinata Y del punto focale del gesto corrente.

4

getTimeDelta()

Questo metodo restituisce la differenza di tempo in millisecondi tra il precedente evento di ridimensionamento accettato e l'evento di ridimensionamento corrente.

5

isInProgress()

Questo metodo restituisce true se è in corso un gesto di ridimensionamento.

6

onTouchEvent(MotionEvent event)

Questo metodo accetta MotionEvents e invia eventi quando appropriato.

Esempio

Di seguito è riportato un esempio che dimostra l'uso della classe ScaleGestureDetector. Crea un'applicazione di base che ti consente di ingrandire e rimpicciolire pizzicando.

Per sperimentare questo esempio, puoi eseguirlo su un dispositivo reale o in un emulatore con touch screen abilitato.

Passi Descrizione
1 Utilizzerai Android Studio per creare un'applicazione Android con un pacchetto com.example.sairamkrishna.myapplication.
2 Modifica il file src / MainActivity.java per aggiungere il codice necessario.
3 Modifica res / layout / activity_main per aggiungere i rispettivi componenti XML
4 Esegui l'applicazione e scegli un dispositivo Android in esecuzione, installa l'applicazione su di esso e verifica i risultati

Di seguito è riportato il contenuto del file di attività principale modificato 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;
      }
   }
}

Di seguito è riportato il contenuto modificato del file xml res/layout/activity_main.xml.

Qui abc indica il logo di 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>

Di seguito è riportato il contenuto del file res/values/string.xml.

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

Di seguito è riportato il contenuto di AndroidManifest.xml file.

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

Proviamo a eseguire la tua applicazione. Presumo che tu abbia collegato il tuo attuale dispositivo mobile Android al tuo computer. Per eseguire l'app da Android Studio, apri uno dei file di attività del tuo progetto e fai clic sull'icona Esegui dalla barra degli strumenti. L'output di esempio dovrebbe essere come questo:

Ora posiziona due dita sullo schermo di Android e separale una parte e vedrai che l'immagine di Android sta ingrandendo. È mostrato nell'immagine qui sotto -

Ora posiziona di nuovo due dita sullo schermo di Android e prova a chiuderle e vedrai che l'immagine di Android si sta riducendo. È mostrato nell'immagine qui sotto -