Efecto de ondulación sobre un elemento de RecyclerView que contiene ImageView

Tengo un RecyclerView que expande el siguiente elemento de la cuadrícula:

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="@dimen/children_tile_border" android:layout_marginTop="@dimen/children_tile_border" android:clickable="true" android:focusable="true" android:background="?selectableItemBackground" tools:ignore="RtlHardcoded"> <com.example.app.ui.widget.SquareImageView android:id="@+id/child_picture" android:layout_width="match_parent" android:layout_height="wrap_content" android:visibility="visible" android:layout_alignParentBottom="true"/> <LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="68dp" android:background="@color/tile_text_background" android:gravity="center_vertical" android:layout_alignParentBottom="true"> .............. </LinearLayout> </RelativeLayout> 

Pero el efecto de rizado no aparece a menos que establezca la visibilidad SquareImageView's a invisible. Parece que el efecto de rizo se dibuja debajo de la SquareImageView . ¿Cómo puedo hacer que se SquareImageView sobre el SquareImageView ?

Añada debajo del código a su disposición principal

 android:clickable="true" android:focusable="true" android:background="?attr/selectableItemBackground" 

Si desea efecto ripple personalizado, añada este ripple_custom.xml en su drawable-v21

 <?xml version="1.0" encoding="utf-8"?> <ripple xmlns:android="http://schemas.android.com/apk/res/android" android:color="@color/colorHighlight"> <item android:id="@android:id/mask" android:drawable="@color/windowBackground" /> </ripple> 

Para soportar la versión anterior, agregue ripple_custom.xml en drawable

 <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"> <shape android:shape="rectangle"> <solid android:color="@color/colorHighlight" /> </shape> </item> <item> <shape android:shape="rectangle"> <solid android:color="@android:color/transparent" /> </shape> </item> </selector> 

Cambio:

 android:background="?selectableItemBackground" 

A:

 android:background="?android:attr/selectableItemBackground" 

Y añada esto a su SquareImageView

 android:clickable="false" 

Podemos envolver el elemento de RecyclerView dentro de FrameLayout y fijar el android:foreground propiedad del android:foreground a él. Haga clic en el enlace siguiente para obtener más detalles. Funciona para mí bastante bien.

Tu SquareImageView está llenando el espacio completo ( width es match_parent y height es wrap_content ) y así el SquareImageView recibe el evento click.

Lo que funcionó en mi caso fue establecer el estado de clic de todos los objetos en su RelativeLayout a false:

 android:clickable="false" 

Sólo asegúrese de que su RelativeLayout maneja el evento de clic en su actividad. En mi código, establezco RelativeLayout en una view v y establezco un onClick Listener en ella para manejar el CheckBox dentro de mi elemento List.

 v.setOnClickListener(this); 

Espero que esto ayude a cualquiera que lo lea.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.