CardViewの上部の角の半径のみを作成する方法はありますか?
<Android.support.v7.widget.CardView
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
app:cardCornerRadius="10dp"
>
Android CardView
クラスを拡張しようとしない限り、XML
からその属性をカスタマイズすることはできません。
それにもかかわらず、その効果を得る方法があります。
CardView
を別のCardView
内に配置し、透明な背景を外側のCardView
に適用して、その角の半径("cornerRadios = 0dp"
)を削除します。たとえば、内部のCardView
のcornerRadius値は3dpになります。次に、内部CardView
にmarginTopを適用します。これにより、その下部境界が外部CardView
によってカットされます。これにより、内部のCardView
の下隅の半径が非表示になります。
XMLコードは次のとおりです。
<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>
また、視覚効果は次のとおりです。
常にコンテンツをインナーCardView
に入れてください。外側のCardViewは、内側のCardView
の下部の丸い角を「隠す」という目的にのみ役立ちます。
dependencies: compile 'com.Android.support:cardview-v7:23.1.1'
<Android.support.v7.widget.CardView
Android:layout_width="80dp"
Android:layout_height="80dp"
Android:elevation="12dp"
Android:id="@+id/view2"
app:cardCornerRadius="40dp"
Android:layout_centerHorizontal="true"
Android:innerRadius="0dp"
Android:shape="ring"
Android:thicknessRatio="1.9">
<ImageView
Android:layout_height="80dp"
Android:layout_width="match_parent"
Android:id="@+id/imageView1"
Android:src="@drawable/Your_image"
Android:layout_alignParentTop="true"
Android:layout_centerHorizontal="true">
</ImageView>
</Android.support.v7.widget.CardView>
このドローアブルxmlを使用して、cardviewの背景として設定できます。
<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<solid Android:color="#ffffffff"/>
<stroke Android:width="1dp"
Android:color="#ff000000"
/>
<padding Android:left="1dp"
Android:top="1dp"
Android:right="1dp"
Android:bottom="1dp"
/>
<corners
Android:topLeftRadius="7dp"
Android:topRightRadius="7dp"/>
</shape>
カードが画面の一番下にあるときに、それを達成する方法の例があります。誰かがこの種の問題を抱えているなら、そのようなことをしてください:
<Android.support.v7.widget.CardView
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:layout_marginBottom="-5dp"
card_view:cardCornerRadius="4dp">
<SomeView
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginBottom="5dp">
</SomeView>
</Android.support.v7.widget.CardView>
カードビューのボトムマージンはマイナスです。カードビュー内のビューも同じですが、下マージンはプラスです。この方法では、丸みを帯びた部分が画面の下に隠れますが、内側のビューにはカウンターマージンがあるため、すべてがまったく同じに見えます。
次の2つのことを行う必要があります。
1)CardViewでsetPreventCornerOverlap(false)
を呼び出します。
2)PutroundedCardView内のImageview
画像ビューの丸めについては、同じ問題があったので、各コーナーに異なる半径を設定できるライブラリを作成しました。最後に、私が望んでいた結果を以下に示しました。
これを実現する簡単な方法は次のとおりです。
1.角の丸いカスタム背景リソース(長方形のような)を作成します。
2.コマンドを使用してこのカスタム背景を設定します-
cardView = view.findViewById(R.id.card_view2);
cardView.setBackgroundResource(R.drawable.card_view_bg);
これは私のために働いた。
左上と右下の半径で作成したXML
レイアウト。
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
<solid Android:color="@color/white" />
<corners Android:topLeftRadius="18dp" Android:bottomRightRadius="18dp" />
</shape>
あなたのケースでは、topLeftRadiusとtopRightRadiusのみを変更する必要があります。
カードビューのコーナーと重なるレイアウトがあり、色が異なる場合は、レイアウト用に異なる背景リソースファイルが必要になることがあり、xmlでこの背景リソースをレイアウトに設定します。
上記の方法を試し、テストしました。これがお役に立てば幸いです。
プログラムでカードの背景を設定する場合は、cardView.setCardBackgroundColor()
ではなくcardView.setBackgroundColor()
を使用し、cardView.xmlでapp:cardPreventCornerOverlap="true"
を使用してください。それは私のためにそれを修正しました。
ところで、上記のコード(引用符内)はJavaではなくKotlinにあります。 Javaを使用している場合は、同等のJavaを使用してください。
ライブラリを使用できます: OptionRoundCardview