Como ya se respondió, la solución más simple es simplemente agregar uno de los siguientes como RecyclerView
fondo de su fila:
android:background="?android:attr/selectableItemBackground"
android:background="?attr/selectableItemBackground"
Sin embargo, si tiene problemas con este método o si desea un control más preciso de los colores, puede hacer lo siguiente.
Efecto dominó personalizado
Esta respuesta comienza con este simple ejemplo de Android RecyclerView . Se verá como la siguiente imagen.
Agregar selector para dispositivos anteriores a API 21
Antes de API 21 (Android 5.0 Lollipop), hacer clic en un RecyclerView
elemento simplemente cambiaba su color de fondo (sin efecto dominó). Eso es lo que también vamos a hacer nosotros. Si todavía tiene usuarios con esos dispositivos, están acostumbrados a ese comportamiento, por lo que no nos vamos a preocupar demasiado por ellos. (Por supuesto, si realmente desea el efecto dominó para ellos, también puede usar una biblioteca personalizada ).
Haga clic con el botón derecho en su res/drawable
carpeta y elija Nuevo> Archivo de recursos dibujable . Llámalo custom_ripple
. Haga clic en Aceptar y pegue el siguiente código.
custom_ripple.xml
<?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/colorAccent" />
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="@android:color/transparent" />
</shape>
</item>
</selector>
Lo usé colorAccent
como color de resaltado para el estado presionado porque ya estaba disponible, pero puede definir el color que desee.
Agregar efecto dominó para dispositivos API 21+
Haga clic con el botón derecho en su res/drawable
carpeta y elija Nuevo> Archivo de recursos dibujable . Llámalo de custom_ripple
nuevo. Sin embargo, no hagas clic en Aceptar todavía esta vez. En la lista de Calificadores disponibles, elija Versión , luego haga clic en el botón >> y escriba 21
para el nivel de API de plataforma . Ahora haga clic en Aceptar y pegue el siguiente código.
v21 / custom_ripple.xml
<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
android:color="@color/colorAccent">
<item
android:id="@android:id/mask"
android:drawable="@android:color/white" />
</ripple>
Nuevamente, usé colorAccent
el color ondulado porque estaba disponible, pero puedes usar el color que quieras. La máscara limita el efecto dominó solo al diseño de la fila. El color de la máscara aparentemente no importa, así que usé un blanco opaco.
Establecer como fondo
En el diseño raíz de su elemento RecyclerView, configure el fondo con la ondulación personalizada que creamos.
android:background="@drawable/custom_ripple"
En el proyecto de ejemplo con el que comenzamos, se ve así:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/custom_ripple"
android:padding="10dp">
<TextView
android:id="@+id/tvAnimalName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"/>
</LinearLayout>
Terminado
Eso es. Debería poder ejecutar su proyecto ahora. Gracias a esta respuesta y a este video de YouTube de ayuda.
CardView
en esa pregunta que no pertenecen a esta pregunta más general.