A menos que você tente estender a CardView
classe Android , você não pode personalizar esse atributo XML
.
No entanto, existe uma maneira de obter esse efeito.
Coloque um CardView
dentro de outro CardView
e aplique um fundo transparente ao seu exterior CardView
e remova o raio do canto ( "cornerRadios = 0dp"
). Seu interior CardView
terá um valor cornerRadius de 3dp, por exemplo. Em seguida, aplique um marginTop ao seu interior CardView
, de modo que seus limites inferiores sejam cortados pelos externos CardView
. Dessa forma, o raio do canto inferior do seu interior CardView
ficará oculto.
O código XML é o seguinte:
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view_outer"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="center"
card_view:cardBackgroundColor="@android:color/transparent"
card_view:cardCornerRadius="0dp"
card_view:cardElevation="3dp" >
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/card_view_inner"
android:layout_width="match_parent"
android:layout_height="200dp"
android:layout_gravity="center"
android:layout_marginTop="3dp"
card_view:cardBackgroundColor="@color/green"
card_view:cardCornerRadius="4dp"
card_view:cardElevation="0dp" >
</android.support.v7.widget.CardView>
</android.support.v7.widget.CardView>
E o efeito visual é o seguinte:
Sempre coloque seu conteúdo no seu Inner CardView
. O CardView externo serve apenas para "ocultar" os cantos arredondados inferiores do interno CardView
.
fonte
innerRadius
,shape
ethicknessRatio
app:cardCornerRadius="40dp"
vai funcionar também.Você pode usar o padrão
MaterialCard
incluído na biblioteca oficial de componentes de materiais .Use em seu layout:
No seu estilo, use o
shapeAppearanceOverlay
atributo para personalizar a forma (o raio do canto padrão é4dp
)Você também pode usar:
É o resultado:
fonte
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.MaterialCardView.Cut"
Há um exemplo de como fazer isso, quando o cartão está bem na parte inferior da tela. Se alguém tiver esse tipo de problema, faça algo assim:
A visualização do cartão tem uma margem inferior negativa. A visualização dentro de uma Visualização de cartão tem a mesma, mas a margem inferior positiva. Desta forma, partes arredondadas ficam escondidas abaixo da tela, mas tudo parece exatamente igual, pois a vista interna possui uma margem contrária.
fonte
Você pode usar este xml drawable e definir como plano de fundo para o Cardview:
fonte
Eu escrevi um drawable lib para customizar a posição do canto arredondado, parecido com este:
Você pode obter esta biblioteca aqui:
https://github.com/mthli/Slice
fonte
Você precisa fazer 2 coisas:
1) Ligue
setPreventCornerOverlap(false)
para o CardView.2) Coloque o Imageview arredondado dentro do CardView
Sobre o arredondamento de sua visualização de imagem, tive o mesmo problema, então fiz uma biblioteca em que você pode definir diferentes raios em cada canto . Finalmente consegui o resultado que queria abaixo.
https://github.com/pungrue26/SelectableRoundedImageView
fonte
você pode usar a biblioteca: OptionRoundCardview
fonte
Você pode colocar seu ImageView dentro de um CardView e adicionar essas propriedades ao ImageView:
Dessa forma, você se livrará do canto inferior arredondado, mas lembre-se de que isso tem o preço de cortar uma pequena parte da imagem.
fonte
A maneira mais fácil de conseguir isso no Android Studio é explicada abaixo:
Etapa 1:
escreva a linha abaixo nas dependências em
build.gradle
:Etapa 2:
Copie o código abaixo em seu arquivo xml para integrar o
CardView
.Para
cardCornerRadius
funcionar, certifique-se de incluir a linha abaixo no layout pai:xmlns:card_view="http://schemas.android.com/apk/res-auto"
E lembre-se de usar
card_view
como namespace para usar acardCornerRadius
propriedade.Por exemplo :
card_view:cardCornerRadius="4dp"
Código XML:
fonte
Uma maneira fácil de conseguir isso seria:
1. Faça um recurso de plano de fundo personalizado (como uma forma de retângulo) com cantos arredondados.
2. definir este fundo personalizado usando o comando -
isso funcionou para mim.
O
XML
layout que fiz com raio superior esquerdo e inferior direito.No seu caso, você precisa alterar apenas topLeftRadius e também topRightRadius.
Se você tiver um layout que se sobrepõe aos cantos da visualização do cartão e talvez tenha uma cor diferente, talvez precise de um arquivo de recurso de plano de fundo diferente para o layout e no xml defina esse recurso de plano de fundo para o seu layout.
Eu tentei e testei o método acima. Espero que isso ajude você.
fonte
Se você estiver configurando o fundo do cartão de forma programática, use o que você usa
cardView.setCardBackgroundColor()
e nãocardView.setBackgroundColor()
useapp:cardPreventCornerOverlap="true"
no cardView.xml. Isso resolveu para mim.Btw, o código acima (entre aspas) está em Kotlin e não em Java. Use o equivalente em java se estiver usando Java.
fonte