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
?
- Problemas con el fondo TabLayout de la biblioteca de diseño de Android
- Obtenga el efecto de ondulación en RecyclerView con elementos que contengan otro color de fondo
- Efecto de ondulación de Android anulado por el estado seleccionado
- La ondulación se dibuja a continuación ImageView
- IllegalStateException utilizando la biblioteca de efectos Ripple en dispositivos Android M
- Crear una ondulación dibujable sin transparencia
- Efecto ondulado en estado prensado + transparencia en estado normal
- Ripple Emulator + proyecto androide con PhoneGap
- Retener el efecto de ondulación durante la notificación
- Establecer el efecto de ondulación en la vista de imagen
- Notificación de pantalla de bloqueo de Android Vista personalizada con ripple y doble toque
- Cómo construir apache cordova proyecto desde la línea de comandos?
- Leer archivo local en Phonegap
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.