Estoy tratando de agregar Ripple Effect al elemento de RecyclerView. Eché un vistazo en línea, pero no pude encontrar lo que necesitaba. Supongo que tiene que ser un efecto personalizado. Probé el atributo android: background en el propio RecyclerView y lo configuré en "? Android: selectableItemBackground" pero no funcionó:
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusable="true"
android:clickable="true"
android:background="?android:selectableItemBackground"
android:id="@+id/recyclerView"
android:layout_below="@+id/tool_bar"/>
Este es el RecyclerView al que estoy tratando de agregar el efecto:
android
android-animation
android-recyclerview
Georgi Koemdzhiev
fuente
fuente
CardView
en esa pregunta que no pertenecen a esta pregunta más general.Respuestas:
Me di cuenta de. Lo único que tuve que hacer fue agregar este atributo:
al elemento raíz del diseño que mi adaptador RecyclerView infla así:
Resultado:
Si aún no puede ver el efecto dominó, agregue estas líneas también al elemento raíz del diseño.
fuente
android:foreground="?android:attr/selectableItemBackground"
android:clickable="true"
también para que esto funcioneComo 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ámalocustom_ripple
. Haga clic en Aceptar y pegue el siguiente código.custom_ripple.xml
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 decustom_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 escriba21
para el nivel de API de plataforma . Ahora haga clic en Aceptar y pegue el siguiente código.v21 / custom_ripple.xml
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.
En el proyecto de ejemplo con el que comenzamos, se ve así:
Terminado
Eso es. Debería poder ejecutar su proyecto ahora. Gracias a esta respuesta y a este video de YouTube de ayuda.
fuente
Creo que hay un pequeño detalle que se pierde.
Si aún no obtiene el efecto dominó después de agregar,
android:background="?android:attr/selectableItemBackground"
intente agregar las siguientes líneas en la raíz del diseño.Esto garantizará que se pueda hacer clic en la vista y habilitará el efecto dominó con el atributo de fondo mencionado anteriormente
fuente
agregue estas líneas en su vista raíz xml del adaptador
fuente
Un enfoque simple y personalizado es establecer un tema de vista como se describe aquí .
some_view.xml
some_style.xml
Aquí se pueden encontrar otras implementaciones personalizadas .
fuente
Usar un estilo de botón
Esto me ha funcionado incontables veces.
Agregue el Estilo de botón sin bordes al elemento raíz de su diseño. No hay necesidad de
focusable
oclickable
atributos, el estilo predeterminado encapsula todo lo que para usted.fuente