¿Cómo interceptar todos los eventos táctiles?
¿Cómo puedo obtener una vista "superior" de mi aplicación (que contiene Activity
y todos los DialogFragment
s)? Necesito interceptar todos los acontecimientos del tacto para manejar el movimiento de una cierta View
entre DialogFragment
y mi Activity
.
He tratado de atraparlos (evento) a través de la vista de la decoración de la Window
de la actividad sin suerte:
getWindow().getDecorView().setOnTouchListener(...);
Puede anular el Activity.dispatchTouchEvent
para interceptar todos los eventos táctiles en su actividad, incluso si tiene algunas vistas como ScrollView, Button, etc. que consumirán el evento táctil.
Combinando con ViewGroup.requestDisallowInterceptTouchEvent
, puede desactivar el evento táctil de ViewGroup. Por ejemplo, si desea desactivar todo el evento táctil en algún grupo de vistas, pruebe lo siguiente:
@Override public boolean dispatchTouchEvent(MotionEvent event) { requestDisallowInterceptTouchEvent( (ViewGroup) findViewById(R.id.topLevelRelativeLayout), true ); return super.dispatchTouchEvent(event); } private void requestDisallowInterceptTouchEvent(ViewGroup v, boolean disallowIntercept) { v.requestDisallowInterceptTouchEvent(disallowIntercept); int childCount = v.getChildCount(); for (int i = 0; i < childCount; i++) { View child = v.getChildAt(i); if (child instanceof ViewGroup) { requestDisallowInterceptTouchEvent((ViewGroup) child, disallowIntercept); } } }