¿Cómo evitar que ScrollView intercepte eventos de clic / toque de la vista detrás de él?

Tengo un ScrollView y un ImageView dentro de un FrameLayout. El ImageView está detrás de la vista de desplazamiento

Mi ScrollView tiene un espacio transparente (LinearLayout s_layout_transparent con 925px de altura).

Así que mi ImageView se puede ver a través de este espacio transparente, pero no se puede hacer clic .

He intentado agregar algo de valor (android: clickable = "false" android: focusable = "android: focusableInTouchMode =" false ") para desplazar la vista para evitar que intercepte el clic envent del ImageView, pero esto no funciona en absoluto.

Aquí está mi diseño:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:gravity="top|center_horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingRight="10dp" > <ImageView android:visibility="visible" android:id="@+id/s_imgv_splash" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/temp_detail_screen_splash" android:adjustViewBounds="true" android:scaleType="fitXY"/> </LinearLayout> <com.dreambox.android.saven.Views.ScrollView android:id="@+id/s_scrollview_event_detail" android:layout_width="fill_parent" android:layout_height="fill_parent" android:scrollbars="none" android:visibility="visible" android:clickable="false" android:focusable="false" android:focusableInTouchMode="false" > <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="false" android:focusableInTouchMode="false" android:focusable="false"> <LinearLayout android:id="@+id/s_layout_transparent" android:layout_gravity="center_vertical" android:layout_width="match_parent" android:layout_height="925px" android:orientation="horizontal" android:background="@color/trasparent" android:clickable="false" android:focusableInTouchMode="false" android:focusable="false"> </LinearLayout> <LinearLayout...> <LinearLayout...> </LinearLayout> </com.dreambox.android.saven.Views.ScrollView> </FrameLayout> 

4 Solutions collect form web for “¿Cómo evitar que ScrollView intercepte eventos de clic / toque de la vista detrás de él?”

Si puedes llenar las partes transparentes con una vista vacía (lo llamamos dummyView), puedes hacer algo como …

 dummyView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent event) { // pass on the touch event to the ImageView s_imgv_splash.dispatchTouchEvent(event); // returning true because we handled the event return true; } }); 

Resolví este problema. Publicar esto para alguien que enfrenta el mismo problema en el presente / en el futuro. Gracias por la sugerencia Mahesh. Basado en la sugerencia de Mahesh, esto es cómo lo hice. Este es mi layout.xml

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/scroll_view" android:background="#ffffff" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/bg_tv" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="TestView" android:layout_marginTop="5dip"/> <View android:layout_width="match_parent" android:layout_height="match_parent" android:background="@android:color/background_dark" android:alpha="0" /> <ScrollView android:id="@+id/sv" android:layout_width="fill_parent" android:layout_height="wrap_content" > <LinearLayout android:id="@id+/wrapper" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="@android:color/transparent" android:orientation="vertical" > <LinearLayout android:id="@+id/dummy" android:layout_width="fill_parent" android:background="@android:color/transparent" android:layout_height="500dip" android:orientation="vertical"/> <LinearLayout android:id="@+id/scroll_" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > ................ ................ </LinearLayout> </LinearLayout> </ScrollView> </RelativeLayout> 

Después de agregar LinearLayouts @ id / dummy y @ id / scroll_, no pude hacer clic en TextView @ id / bg_tv. El siguiente código resolvió mi problema.

 //dispatch touch events mDummyView = findViewById(R.id.dummy); mDummyView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { mTextView.dispatchTouchEvent(motionEvent); return true; } }); mLayout = (LinearLayout)findViewById(R.id.scroll_); mLayout.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { if (scrollPercent <= 0.25f) { mTextView.dispatchTouchEvent(motionEvent); return true; } return false; } }); 

En el caso de mLayout, TouchEvents se envía sólo después de que scrollView vaya a la parte inferior de la pantalla.

PS: Estoy escribiendo una respuesta por primera vez. Lo siento si usted encuentra el formato muy pobre o si la respuesta no está escrita de la manera que se supone que es.

No puedo dar la solución exacta

Compruebe que puede ayudar

 yourscrollview.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if(touch exists inside imageview boundaries) { do imageview click action } return false; } }) 

El ScrollView es el último en FrameLayout por lo tanto tiene preferencia.

Cuando se activa tu LinearLayout con ImageView, debes decir

 findViewById(R.id.s_scrollview_event_detail).setVisibility(View.INVISIBLE) 

Y viceversa, cuando ScrollView está activado, la vista de diseño "hermano" debe ser invisible.

  • Pasar los toques a la vista bajo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.