Desactivar todas las interacciones de pantalla táctil durante la animación
Deseo desactivar todas las interacciones de la pantalla táctil mientras se muestra una animación. No deseo utilizar el método setClickable()
en los botones al principio o al final de la animación porque hay un gran número de botones. ¿Alguna sugerencia?
- Botón android no se puede hacer clic mientras se reproducen animaciones
- Deshabilitar evento de clic en los elementos de lista de reproducción de Android
- Manejo de clic para un ClickableSpan con texto seleccionable requiere doble clic
- Ampliar el área táctil de ClickableSpan
- cómo hacer clic en el botón de acción flotante en un fragmento?
- Cómo deshabilitar el clic en ListView en android?
- ¿Por qué los elementos ListView no se pueden hacer clic después de desplazarse?
- Android, gestos sobre los widgets que se pueden hacer clic
- (Android) listview con varios botones, no se puede hacer clic en el elemento de lista
- Androide. ¿Cómo establezco todos los botones que se pueden hacer clic o no se pueden seleccionar a la vez usando setClickable?
En su Actividad, puede anular onTouchEvent
y siempre return true;
Para indicar que está manejando los eventos táctiles.
Usted puede encontrar la documentación para esa función allí .
Editar Aquí es una forma en la que puede desactivar el toque en toda la pantalla en lugar de manejar cada vista una por una … Primero cambie su diseño actual como este:
<FrameLayout android:layout_width="fill_parent" android:layout_height="fill_parent" > < .... put your current layout here ... /> <TouchBlackHoleView android:id="@+id/black_hole" android:layout_width="fill_parent" android:layout_height="fill_parent" /> </FrameLayout>
Y luego defina su vista personalizada con algo como esto:
public class TouchBlackHoleView extends View { private boolean touch_disabled=true; @Override public boolean onTouchEvent(MotionEvent e) { return touch_disabled; } public disable_touch(boolean b) { touch_disabled=b; } }
Luego, en la actividad, puede desactivar el toque con
(TouchBlackHoleView) black_hole = findViewById(R.id.black_hole); black_hole.disable_touch(true);
Y habilítelo de nuevo con
black_hole.disable_touch(false);
Respuesta a este problema
for (int i = 1; i < layout.getChildCount(); i++) { TableRow row = (TableRow) layout.getChildAt(i); row.setClickable(false);
Seleccionó todas las filas del diseño de la tabla que tenía todas las vistas y las inhabilitó
Finalmente tomé como una respuesta básica de @Matthieu y hacerlo funcionar de esa manera. Decido publicar mi respuesta porque me lleva quizás 30 minutos entender por qué tengo error.
XML
<...your path to this view and in the end --> .TouchBlackHoleView android:id="@+id/blackHole" android:layout_width="match_parent" android:layout_height="match_parent" />
Clase
Clase pública TouchBlackHoleView extends View {booleano privado touchDisable = false;
public TouchBlackHoleView(Context context) { super(context); } public TouchBlackHoleView(Context context, AttributeSet attrs) { super(context, attrs); } public TouchBlackHoleView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } @Override public boolean onTouchEvent(MotionEvent event) { return touchDisable; } public void disableTouch(boolean value){ touchDisable = value; } }
Utilizando
blackHole = (TouchBlackHoleView) findViewById(R.id.blackHole); blackHole.disableTouch(true);
Disfrutar
Manera fácil de poner en práctica que es agregar la disposición transaperent sobre ella (la agrega en su altura y ancho del padre del relleno del xml).
En el inicio de la animación: transaparentlayout.setClickable(true);
En el final de la animación: transaparentlayout.setClickable(false);