Como já respondido, a solução mais simples é apenas adicionar um dos seguintes como RecyclerView
plano de fundo da linha:
android:background="?android:attr/selectableItemBackground"
android:background="?attr/selectableItemBackground"
No entanto, se você estiver tendo problemas com esse método ou se quiser um controle mais preciso sobre as cores, faça o seguinte.
Efeito de ondulação personalizado
Esta resposta começa com este exemplo simples do Android RecyclerView . Será semelhante à imagem a seguir.
Adicionar seletor para dispositivos pré API 21
Antes da API 21 (Android 5.0 Lollipop), clicar em um RecyclerView
item apenas alterava sua cor de fundo (sem efeito cascata). Isso é o que vamos fazer também. Se você ainda tem usuários com esses dispositivos, eles estão acostumados com esse comportamento, então não vamos nos preocupar muito com eles. (Claro, se você realmente quiser o efeito cascata para eles também, você pode usar uma biblioteca personalizada .)
Clique com o botão direito na res/drawable
pasta e escolha Novo> Arquivo de recursos Drawable . Ligue custom_ripple
. Clique em OK e cole o código a seguir.
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>
Usei colorAccent
como cor de destaque para o estado pressionado porque já estava disponível, mas você pode definir a cor que quiser.
Adicionar efeito Ripple para dispositivos API 21+
Clique com o botão direito na res/drawable
pasta e escolha Novo> Arquivo de recursos Drawable . Ligue custom_ripple
novamente. Não clique em OK, ainda desta vez. Na lista de qualificadores disponíveis, escolha Versão , clique no botão >> e escreva 21
para o nível de API da plataforma . Agora clique em OK e cole o código a seguir.
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>
Novamente, usei colorAccent
para a cor ondulada porque ela estava disponível, mas você pode usar a cor que quiser. A máscara limita o efeito de ondulação apenas ao layout da linha. A cor da máscara aparentemente não importa, então usei apenas um branco opaco.
Definir como plano de fundo
No layout raiz do seu item RecyclerView, defina o plano de fundo para a ondulação personalizada que criamos.
android:background="@drawable/custom_ripple"
No projeto de exemplo com o qual começamos, é assim:
<?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>
Acabado
É isso aí. Você deve conseguir executar seu projeto agora. Obrigado a esta resposta e este vídeo do YouTube para obter ajuda.
CardView
naquela questão que não pertencem a esta questão mais geral.