android - tactil - Desactivar el toque de varios dedos en mi aplicación
zoom en pantalla android (3)
Podría colocar al usuario un GestureOverlayView
alrededor de toda la pantalla y solo permitir que el primer evento táctil sea procesado por las vistas inferiores.
Debe configurar un onTouchListener en esta vista transparente, que hace algo como esto:
gestureOverlayView.setOnTouchListener(new View.OnTouchListnener(){
@Override
public boolean onTouch(View v, MotionEvent e){
// True means the event is ignored by the overlayed views
return e.getPointerCount() > 1 ? true : false;
}
}
Esta pregunta ya tiene una respuesta aquí:
- Deshabilitar o evitar multitouch en la Actividad 8 respuestas
Mi aplicación usa una Actividad para alojar varios fragmentos. Cada vez que se muestra un fragmento en la pantalla del teléfono, la vista de cada fragmento consta de varios iconos de imagen.
Actualmente, el usuario puede presionar dos íconos simultáneamente con dos dedos (con cada fingure presionar un ícono). Quiero desactivar esta función multitáctil en mi aplicación para permitir que solo un ícono de prensa surta efecto a la vez .
Intenté las siguientes maneras:
Camino 1: en el tema de mi aplicación, agregué:
<item name="android:windowEnableSplitTouch">false</item>
Camino 2: En Android Manifiesto xml, agregué:
<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
Camino 3: en mi actividad:
@Override
public boolean onTouchEvent(MotionEvent event) {
if(event.getPointerCount() > 1) {
System.out.println("Multitouch detected!");
return true;
}
else
return super.onTouchEvent(event);
}
Lamentablemente, ninguna de mis soluciones funciona. Entonces, ¿cómo puedo desactivar la función multitáctil en mi aplicación?
Por caso: tiene varios botones y desea seleccionar solo un botón. En padres (NO RAIZ, solo padre de hijo) de botones, en sus parámetros xml agregar
android: splitMotionEvents = "falso"
Y eso es. Ejemplo:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:splitMotionEvents="false" <-----------!!!
>
<Button
android:id="@+id/button_main_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button1" />
<Button
android:id="@+id/button_main_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button2" />
<Button
android:id="@+id/button_main_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="button3" />
</LinearLayout>
Por cierto. Cuando tiene 2 linearlayout con 3 botones por diseño, debe establecer este splitMotionEvents en esos dos diseños y también en el padre de ese 2 linearLayouts. De lo contrario, solo podrá hacer clic en un botón por diseño (suma = 2 en ese momento). Espero que lo obtengas. :)
Ninguna de las otras soluciones no funcionó para mí o era demasiado débil.
Sí, también me enfrenté a este problema una vez y encontré la solución que android: splitMotionEvents = "false", esto solo funcionará para dirigir a los niños de un diseño.
Ejemplo :
Como si crearas dos diseños A y B e In A tienes dos botones b1, b2 En B tienes dos botones b3, b4
ambos, A y B, están en el Diseño principal. Primero, debe aclarar que estos botones no son hijos directos del Diseño principal.
En el Diseño principal solo tienen dos hijos A y B
Que si agrega android: splitMotionEvents = "false" al Diseño principal, el toque múltiple no funcionará en el Diseño A y el Diseño B, pero funcionará en cada botón b1, b2, b3, b4 porque no son hijos directos del Diseño principal
Por lo tanto, si quieres que el toque múltiple no funcione en estos botones también, entonces debes agregar android: splitMotionEvents = "false" a cada diseño por separado
Hay algunos casos:
1). Si solo agrega android: splitMotionEvents = "false" en el Layout A, no podrá tocar el botón b1 y el botón b2 al mismo tiempo, pero puede tocar el botón b1 o b2 y el botón b3 o b4 al mismo tiempo.
2). justo enfrente del caso 1.
3). Pero si agrega android: splitMotionEvents = "false" en ambos diseños, no podrá tocar los dos botones de la pantalla al mismo tiempo.
<LinearLayout 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:orientation="vertical"
android:splitMotionEvents="false" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:splitMotionEvents="false" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="b1" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="b2" />
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:splitMotionEvents="false" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="b3" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="b4" />
</LinearLayout>
Creo que podría ser útil para ti.