¿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); } } } 
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.