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>