Estou tentando fazer com que um CardView exiba o efeito cascata quando tocado ao definir o atributo android: backgound no arquivo XML de atividade, conforme descrito aqui na página Android Developers, mas não está funcionando. Nenhuma animação, mas o método em onClick é chamado. Eu também tentei criar um arquivo ripple.xml como sugerido aqui , mas o mesmo resultado.
O CardView como aparece no arquivo XML da atividade:
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="155dp"
android:layout_height="230dp"
android:elevation="4dp"
android:translationZ="5dp"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:onClick="showNotices"
android:background="?android:attr/selectableItemBackground"
android:id="@+id/notices_card"
card_view:cardCornerRadius="2dp">
</android.support.v7.widget.CardView>
Eu sou relativamente novo no desenvolvimento do Android, por isso posso ter cometido alguns erros óbvios.
Desde já, obrigado.
android
android-layout
android-5.0-lollipop
android-cardview
AkraticCritic
fonte
fonte
?android:attr/selectableItemBackground
requer API nível 11android:clickable="true"
.Adicione esses dois códigos de linha à sua exibição xml para dar um efeito cascata no seu cardView.
fonte
foreground
funciona com vistas de fundo personalizadas como um encanto! Agradável!Consegui obter o efeito cascata no cardview:
e para o custom_bg que você pode ver no código acima, é necessário definir um arquivo xml para os dispositivos pirulito (no pacote drawable-v21) e pré-pirulito (no pacote drawable). para custom_bg no pacote drawable-v21, o código é:
para custom_bg no pacote extraível, o código é:
portanto, nos dispositivos pré-pirulito, você terá um efeito de clique sólido e nos dispositivos pirulitos, terá um efeito cascata na visualização do cartão.
fonte
O efeito cascata foi omitido na biblioteca de suporte do appcompat, que é o que você está usando. Se você quiser ver a ondulação, use a versão Android L e teste-a em um dispositivo Android L. De acordo com o site AppCompat v7:
"Por que não existem ondulações no pré-pirulito? Muito do que permite que o RippleDrawable funcione sem problemas é o novo RenderThread do Android 5.0. Para otimizar o desempenho nas versões anteriores do Android, deixamos o RippleDrawable de fora por enquanto."
Confira este link aqui para mais informações
fonte
Se o aplicativo em
minSdkVersion
que você está trabalhando for do nível 9, você poderá usar:Em vez disso, a partir do nível 11, você usa:
Da documentação:
fonte
Para mim, acrescentando que o
foreground
queCardView
fez não trabalho (razão desconhecida: /)Adicionar o mesmo ao layout filho fez o truque.
CÓDIGO:
fonte
Adicione esses dois tipos de código como um encanto para qualquer visualização como Button, Linear Layout ou CardView Basta colocar essas duas linhas e ver a mágica ...
fonte
Se houver um layout raiz, como RelativeLayout ou LinearLayout, que contenha todo o componente do item do adaptador no CardView, será necessário definir o atributo de plano de fundo nesse layout raiz. gostar:
fonte
Evento Ripple para
Cardview
controle do Android :fonte
Eu não estava feliz com o AppCompat, então escrevi meu próprio CardView e modifiquei as ondulações. Aqui está rodando no Galaxy S com Gingerbread, então é definitivamente possível.
Para mais detalhes, verifique o código fonte .
fonte
Adicione o seguinte ao seu xml:
E adicione ao seu adaptador (se for o seu caso)
fonte
Para aqueles que procuram uma solução para o problema do efeito cascata que não funciona em um CardView criado por programação (ou, no meu caso, exibição personalizada que estende o CardView) sendo mostrado em um RecyclerView, o seguinte funcionou para mim. Basicamente, declarar os atributos XML mencionados nas outras respostas declarativamente no arquivo de layout XML parece não funcionar para um CardView criado por programação ou para um criado a partir de um layout personalizado (mesmo que a exibição raiz seja CardView ou o elemento de mesclagem seja usado), portanto eles devem ser definidos programaticamente da seguinte maneira:
Onde
MadeupCardView extends CardView
Kudos para esta resposta para aTypedArray
parte.fonte
Apenas trabalhando na api 21 e usar isso, não use esta exibição de cartão de linha da lista
fonte