17

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.Desactivar el toque de varios dedos en mi aplicación

Actualmente, el usuario puede presionar dos iconos simultáneamente con dos dedos (presionando cada fingura en un icono). Quiero deshabilitar esta función multitáctil en mi aplicación para permitir solo un ícono de prensa tiene efecto a la vez.

probé las siguientes maneras:

Camino 1: en mi tema de aplicación, añadí:

<item name="android:windowEnableSplitTouch">false</item> 

manera 2: En Android manifiesto XML, añadí:

<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" /> 

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

Por desgracia, ninguno de mis trabajos soluciones. Entonces, ¿Cómo puedo desactivar la función multi-touch en mi aplicación?

+1

intente agregar 'android: splitMotionEvents =" false "' en su ParentView en lugar de en el tema de la aplicación. No estoy seguro de si hay diferencias, pero en mis aplicaciones, funciona. – Aprian

+0

Lo intenté, tampoco funciona para mí –

Respuesta

1

Puede poner al usuario un GestureOverlayView en toda la pantalla y solo permite que el primer evento táctil sea procesado por las vistas inferiores.

Debe configurar un onTouchListener en esta visión 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; 
    } 
} 
+0

¿Podría proporcionarnos algún código de muestra de su solución? –

+0

Claro, échale un vistazo. –

+0

Gracias. pero ¿cómo se vincula este gesto OverLayView a mi fragmento? ¿Dónde definirlo? Como dije, tengo una Actividad que alberga múltiples fragmentos. ¿Puedo definirlo en actividad en lugar de en cada fragmento? –

34

Para el caso: tiene varios botones y quiere dar seleccionado un solo botón. En padre (no como root, solo los padres del niño) de los botones, en sus parametros xml añadir

androide: splitMotionEvents = "false"

Y eso es todo. 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> 

BTW. Cuando tiene 2 linearlayout con 3 botones por diseño, debe establecer este splitMotionEvents en los dos diseños y también en el padre de esos 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 fue demasiado débil.

+0

así que es mejor incluir android: splitMotionEvents = "false" en todos los diseños, ¡correcto! –

+0

Lo escribiría mejor pero mi inglés aún no es suficiente para describir esta compleja situación :) – deadfish

+0

Todavía estoy corriendo con el mismo problema ... cualquier sugerencia aquí http://stackoverflow.com/q/29072698/2624806 – CoDe

9

Sí que también se enfrentó a esta cuestión una vez y me encontré solución que android: splitMotionEvents = "false" esto funcionará sólo para hijos directos de un diseño.

Ejemplo:

Al igual que si crea dos diseño A y B y En una tiene dos botones B1, B2 En B tiene dos botones B3, B4

tanto A como B son en Layout Padres Así que primero hay que aclarar que estos botones no son hijos directos de diseño de Padres

en la disposición de padres sólo tienen dos hijos a y B

Que si agrega android: splitMotionEvents = "false" al Diseño principal y luego 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 estos no son directos hijos de disposición de Padres

lo tanto, si desea que varios táctil no funcionará en estos botones también que usted tiene que añadir android: splitMotionEvents = "false" esto a cada diseño separado

Hay algunos casos:

1) .Si solo agrega android: splitMotionEvents = "false" en el Diseño A que no puede 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 hora.

2). justo enfrente del caso 1.

3). Pero si agrega android: splitMotionEvents = "false" en ambos diseños, no podrá tocar ninguno de 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 útiles para usted.

Cuestiones relacionadas