Android: multitáctil
El gesto multitáctil ocurre cuando más de un dedo toca la pantalla al mismo tiempo. Android nos permite detectar estos gestos.
El sistema Android genera los siguientes eventos táctiles cada vez que varios dedos tocan la pantalla al mismo tiempo.
No Señor | Descripción del evento |
---|---|
1 | ACTION_DOWN Por el primer puntero que toca la pantalla. Esto inicia el gesto. |
2 | ACTION_POINTER_DOWN Para punteros adicionales que ingresan a la pantalla más allá del primero. |
3 | ACTION_MOVE Ha ocurrido un cambio durante un gesto de prensa. |
4 | ACTION_POINTER_UP Se envía cuando sube un puntero no principal. |
5 | ACTION_UP Se envía cuando el último puntero sale de la pantalla. |
Entonces, para detectar cualquiera de los eventos mencionados anteriormente, debe anular onTouchEvent()y verifique estos eventos manualmente. Su sintaxis se da a continuación:
public boolean onTouchEvent(MotionEvent ev){
final int actionPeformed = ev.getAction();
switch(actionPeformed){
case MotionEvent.ACTION_DOWN:{
break;
}
case MotionEvent.ACTION_MOVE:{
break;
}
return true;
}
}
En estos casos, puede realizar cualquier cálculo que desee. Por ejemplo, hacer zoom, encoger, etc. Para obtener las coordenadas de los ejes X e Y, puede llamargetX() y getY()método. Su sintaxis se da a continuación:
final float x = ev.getX();
final float y = ev.getY();
Aparte de estos métodos, hay otros métodos proporcionados por esta clase MotionEvent para tratar mejor el multitouch. Estos métodos se enumeran a continuación:
No Señor | Método y descripción |
---|---|
1 | getAction() Este método devuelve el tipo de acción que se está realizando. |
2 | getPressure() Este método devuelve la presión actual de este evento para el primer índice |
3 | getRawX() Este método devuelve la coordenada X sin procesar original de este evento |
4 | getRawY() Este método devuelve la coordenada Y sin procesar original de este evento |
5 | getSize() Este método devuelve el tamaño del primer índice de puntero. |
6 | getSource() Este método obtiene la fuente del evento. |
7 | getXPrecision() Este método devuelve la precisión de las coordenadas X que se informan |
8 | getYPrecision() Este método devuelve la precisión de las coordenadas Y que se informan |
Ejemplo
A continuación se muestra un ejemplo que demuestra el uso de Multitouch. Crea una aplicación de gestos multitáctil básica que le permite ver las coordenadas cuando se realiza multitouch.
Para experimentar con este ejemplo, debe ejecutarlo en un dispositivo real.
Pasos | Descripción |
---|---|
1 | Utilizará Android Studio para crear una aplicación de Android en un paquete com.example.sairamkrishna.myapplication. |
2 | Modifique el archivo src / MainActivity.java para agregar código multitáctil. |
3 | Modifique res / layout / activity_main para agregar los componentes XML respectivos. |
4 | Ejecute la aplicación y elija un dispositivo Android en ejecución e instale la aplicación en él y verifique los resultados. |
A continuación se muestra el contenido del archivo de actividad principal modificado 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;
}
});
}
}
A continuación se muestra el contenido modificado del xml res/layout/activity_main.xml.
En el siguiente código abcindica el logo de tutorialspoint.com
<?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>
A continuación se muestra el contenido de la res/values/string.xml.
<resources>
<string name="app_name">My Application</string>
</resources>
A continuación se muestra el contenido de AndroidManifest.xml archivo.
<?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>
Intentemos ejecutar su aplicación. Supongo que ha conectado su dispositivo móvil Android real con su computadora. Para ejecutar la aplicación desde Android Studio, abra uno de los archivos de actividad de su proyecto y haga clic en el icono Ejecutar de la barra de herramientas. Antes de iniciar su aplicación, Android Studio mostrará la siguiente ventana para seleccionar una opción donde desea ejecutar su aplicación de Android.
Seleccione su dispositivo móvil como una opción y luego verifique su dispositivo móvil que mostrará su pantalla predeterminada -
De forma predeterminada, no verá nada en ningún campo. Ahora solo toque el área Toque aquí y vea algunos datos en los campos. Se muestra a continuación:
Verá que los datos en el campo Mover son 0, porque solo se ha realizado un solo gesto táctil. Ahora toque en la pantalla y comience a arrastrar el dedo. Verá el cambio en los datos del campo de movimiento. Se muestra a continuación: