recyclerview example cardview android android-recyclerview ripple

android - example - Efecto dominó sobre un ítem RecyclerView que contiene ImageView



recyclerview android (5)

Tengo un RecyclerView que expande el siguiente elemento de la grilla:

<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 SquareImageView''s no aparece a menos que establezca la visibilidad SquareImageView''s invisible. Parece que el efecto de onda se dibuja debajo de SquareImageView . ¿Cómo puedo hacer que se SquareImageView sobre SquareImageView ?


Cambio:

android:background="?selectableItemBackground"

A:

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

Y agrégalo a tu SquareImageView

android:clickable="false"


Podemos ajustar el elemento RecyclerView dentro de FrameLayout y configurar android:foreground propiedad de android:foreground para él. Pagar el siguiente link para más detalles. Me funciona bastante bien.


Si tienes un CardView + ImageView
solo inserte en CardView

android:focusable="true" android:foreground="?android:attr/selectableItemBackground"

Y para RelativeLayout + ImageView
Insertar en RelativeLayout

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

O

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

Este código funcionó para mí


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

Lo que funcionó en mi caso fue establecer el estado seleccionable de todos los objetos en su RelativeLayout en falso:

android:clickable="false"

Solo asegúrese de que su RelativeLayout maneje el evento click en su actividad. En mi código, establezco el RelativeLayout en una view v y configuro un onClick Listener en él para manejar el CheckBox dentro de mi elemento List.

v.setOnClickListener(this);

Espero que esto ayude a cualquiera que lo lea.


agregue el código siguiente a su diseño principal

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

si quieres un efecto de onda personalizado agrega este ripple_custom.xml en tu 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 admitir versiones anteriores, 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>