Android - Multitouch
Eine Multi-Touch-Geste tritt auf, wenn mehr als ein Finger gleichzeitig den Bildschirm berührt. Mit Android können wir diese Gesten erkennen.
Das Android-System generiert die folgenden Berührungsereignisse, wenn mehrere Finger gleichzeitig den Bildschirm berühren.
Sr.Nr. | Eventbeschreibung |
---|---|
1 | ACTION_DOWN Für den ersten Zeiger, der den Bildschirm berührt. Dies startet die Geste. |
2 | ACTION_POINTER_DOWN Für zusätzliche Zeiger, die über den ersten hinaus in den Bildschirm gelangen. |
3 | ACTION_MOVE Während einer Pressegeste ist eine Änderung aufgetreten. |
4 | ACTION_POINTER_UP Wird gesendet, wenn ein nicht primärer Zeiger angezeigt wird. |
5 | ACTION_UP Wird gesendet, wenn der letzte Zeiger den Bildschirm verlässt. |
Um eines der oben genannten Ereignisse zu erkennen, müssen Sie es überschreiben onTouchEvent()Methode und überprüfen Sie diese Ereignisse manuell. Die Syntax ist unten angegeben -
public boolean onTouchEvent(MotionEvent ev){
final int actionPeformed = ev.getAction();
switch(actionPeformed){
case MotionEvent.ACTION_DOWN:{
break;
}
case MotionEvent.ACTION_MOVE:{
break;
}
return true;
}
}
In diesen Fällen können Sie eine beliebige Berechnung durchführen. Zum Beispiel Zoomen, Verkleinern usw. Um die Koordinaten der X- und Y-Achse zu erhalten, können Sie aufrufengetX() und getY()Methode. Die Syntax ist unten angegeben -
final float x = ev.getX();
final float y = ev.getY();
Abgesehen von diesen Methoden bietet diese MotionEvent-Klasse weitere Methoden für einen besseren Umgang mit Multitouch. Diese Methoden sind unten aufgeführt -
Sr.Nr. | Methode & Beschreibung |
---|---|
1 | getAction() Diese Methode gibt die Art der ausgeführten Aktion zurück |
2 | getPressure() Diese Methode gibt den aktuellen Druck dieses Ereignisses für den ersten Index zurück |
3 | getRawX() Diese Methode gibt die ursprüngliche rohe X-Koordinate dieses Ereignisses zurück |
4 | getRawY() Diese Methode gibt die ursprüngliche rohe Y-Koordinate dieses Ereignisses zurück |
5 | getSize() Diese Methode gibt die Größe für den ersten Zeigerindex zurück |
6 | getSource() Diese Methode ruft die Quelle des Ereignisses ab |
7 | getXPrecision() Diese Methode gibt die Genauigkeit der gemeldeten X-Koordinaten zurück |
8 | getYPrecision() Diese Methode gibt die Genauigkeit der gemeldeten Y-Koordinaten zurück |
Beispiel
Hier ist ein Beispiel, das die Verwendung von Multitouch demonstriert. Es wird eine grundlegende Multitouch-Gestenanwendung erstellt, mit der Sie die Koordinaten anzeigen können, wenn Multitouch ausgeführt wird.
Um mit diesem Beispiel zu experimentieren, müssen Sie dies auf einem tatsächlichen Gerät ausführen.
Schritte | Beschreibung |
---|---|
1 | Sie werden Android Studio verwenden, um eine Android-Anwendung unter einem Paket com.example.sairamkrishna.myapplication zu erstellen. |
2 | Ändern Sie die Datei src / MainActivity.java, um Multitouch-Code hinzuzufügen. |
3 | Ändern Sie res / layout / activity_main, um entsprechende XML-Komponenten hinzuzufügen. |
4 | Führen Sie die Anwendung aus und wählen Sie ein laufendes Android-Gerät aus. Installieren Sie die Anwendung darauf und überprüfen Sie die Ergebnisse. |
Es folgt der Inhalt der geänderten Hauptaktivitätsdatei src/MainActivity.java.
package com.example.sairamkrishna.myapplication;
import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
float xAxis = 0f;
float yAxis = 0f;
float lastXAxis = 0f;
float lastYAxis = 0f;
EditText ed1, ed2, ed3, ed4;
TextView tv1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ed1 = (EditText) findViewById(R.id.editText);
ed2 = (EditText) findViewById(R.id.editText2);
ed3 = (EditText) findViewById(R.id.editText3);
ed4 = (EditText) findViewById(R.id.editText4);
tv1=(TextView)findViewById(R.id.textView2);
tv1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
final int actionPeformed = event.getAction();
switch(actionPeformed){
case MotionEvent.ACTION_DOWN:{
final float x = event.getX();
final float y = event.getY();
lastXAxis = x;
lastYAxis = y;
ed1.setText(Float.toString(lastXAxis));
ed2.setText(Float.toString(lastYAxis));
break;
}
case MotionEvent.ACTION_MOVE:{
final float x = event.getX();
final float y = event.getY();
final float dx = x - lastXAxis;
final float dy = y - lastYAxis;
xAxis += dx;
yAxis += dy;
ed3.setText(Float.toString(xAxis));
ed4.setText(Float.toString(yAxis));
break;
}
}
return true;
}
});
}
}
Es folgt der geänderte Inhalt der XML res/layout/activity_main.xml.
Im folgenden Code abczeigt das Logo von tutorialspoint.com an
<?xml version="1.0" encoding="utf-8"?>
<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"
android:transitionGroup="true">
<TextView android:text="Multitouch 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:layout_below="@+id/textView"
android:layout_centerHorizontal="true"
android:theme="@style/Base.TextAppearance.AppCompat" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText"
android:layout_below="@+id/imageView"
android:layout_alignRight="@+id/textview"
android:layout_alignEnd="@+id/textview"
android:hint="X-Axis"
android:layout_alignLeft="@+id/textview"
android:layout_alignStart="@+id/textview"
android:textColorHint="#ff69ff0e" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText2"
android:layout_below="@+id/editText"
android:layout_alignLeft="@+id/editText"
android:layout_alignStart="@+id/editText"
android:textColorHint="#ff21ff11"
android:hint="Y-Axis"
android:layout_alignRight="@+id/editText"
android:layout_alignEnd="@+id/editText" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText3"
android:layout_below="@+id/editText2"
android:layout_alignLeft="@+id/editText2"
android:layout_alignStart="@+id/editText2"
android:hint="Move X"
android:textColorHint="#ff33ff20"
android:layout_alignRight="@+id/editText2"
android:layout_alignEnd="@+id/editText2" />
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/editText4"
android:layout_below="@+id/editText3"
android:layout_alignLeft="@+id/editText3"
android:layout_alignStart="@+id/editText3"
android:textColorHint="#ff31ff07"
android:hint="Move Y"
android:layout_alignRight="@+id/editText3"
android:layout_alignEnd="@+id/editText3" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Touch here"
android:id="@+id/textView2"
android:layout_alignParentBottom="true"
android:layout_alignLeft="@+id/imageView"
android:layout_alignStart="@+id/imageView"
android:focusable="true"
android:typeface="sans"
android:clickable="true"
android:textColor="#ff5480ff"
android:textSize="35dp" />
</RelativeLayout>
Es folgt der Inhalt der res/values/string.xml.
<resources>
<string name="app_name">My Application</string>
</resources>
Es folgt der Inhalt von AndroidManifest.xml Datei.
<?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="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
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>
Versuchen wir, Ihre Anwendung auszuführen. Ich gehe davon aus, dass Sie Ihr aktuelles Android Mobile-Gerät mit Ihrem Computer verbunden haben. Um die App von Android Studio aus auszuführen, öffnen Sie eine der Aktivitätsdateien Ihres Projekts und klicken Sie in
Wählen Sie Ihr Mobilgerät als Option aus und überprüfen Sie dann Ihr Mobilgerät, auf dem Ihr Standardbildschirm angezeigt wird.
Standardmäßig wird in keinem Feld etwas angezeigt. Tippen Sie jetzt einfach auf den Bereich Hier berühren und sehen Sie einige Daten in den Feldern. Es ist unten gezeigt -
Sie werden sehen, dass die Daten im Feld Verschieben 0 sind, da nur eine einzige Berührungsgeste ausgeführt wurde. Tippen Sie nun auf den Bildschirm und ziehen Sie Ihren Finger. Sie sehen die Änderung in den Daten des Verschiebungsfeldes. Es ist unten gezeigt -