web-dev-qa-db-ja.com

Android-上部にのみ角の丸い描画可能

背景として丸い長方形を持つために、このドロアブルがありました:

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <solid Android:color="@color/white" />
    <stroke Android:width="1dp" Android:color="@color/light_gray" />
    <padding Android:left="10dp" Android:top="10dp" Android:right="10dp" Android:bottom="10dp" />
    <corners Android:radius="6dp" />
</shape>

予想どおり、これは正常に機能しています。

さて、これを変更して、上の角だけを丸めたいので、これに変更します:

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <solid Android:color="@color/white" />
    <stroke Android:width="1dp" Android:color="@color/light_gray" />
    <padding Android:left="10dp" Android:top="10dp" Android:right="10dp" Android:bottom="10dp" />
    <corners Android:topLeftRadius="6dp" Android:topRightRadius="6dp"
             Android:bottomLeftRadius="0dp" Android:bottomRightRadius="0dp"/>
</shape>

しかし、今では角のいずれも丸くならず、プレーンな長方形が得られます。ここで何が欠けていますか?

133
Aleks G

これらの値を与えてみてください:

 <corners Android:topLeftRadius="6dp" Android:topRightRadius="6dp"
         Android:bottomLeftRadius="0.1dp" Android:bottomRightRadius="0.1dp"/>

0dp0.1dpに変更したことに注意してください。

編集:Aleks Gコメント を参照してください。

263
aqs

次のようなことを試してください。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:bottom="-20dp" Android:left="-20dp">
        <shape Android:shape="rectangle">
            <solid Android:color="@color/white" />

            <corners Android:radius="20dp" />
        </shape>
    </item>
</layer-list>

長方形の異なるコーナー半径を設定するのは適切ではないようです。したがって、このハックを使用できます。

14
busylee

私の場合、以下のコード

    <?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item Android:top="10dp" Android:bottom="-10dp"
        >

        <shape Android:shape="rectangle">
            <solid Android:color="@color/maincolor" />

            <corners
                Android:topLeftRadius="10dp"
                Android:topRightRadius="10dp"
                Android:bottomLeftRadius="0dp"
                Android:bottomRightRadius="0dp"
            />
        </shape>

    </item>
    </layer-list>
8
Shekhar

busylee's answer に基づいて、これは、1つのun角が丸いdrawableを作成する方法です(この例では左上):

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:Android="http://schemas.Android.com/apk/res/Android">
    <item>
        <shape Android:shape="rectangle">
            <solid Android:color="@color/white" />
            <!-- A numeric value is specified in "radius" for demonstrative purposes only,
                  it should be @dimen/val_name -->
            <corners Android:radius="10dp" />
        </shape>
    </item>
    <!-- To keep the TOP-LEFT corner UNROUNDED set both OPPOSITE offsets (bottom+right): -->
    <item
        Android:bottom="10dp"
        Android:right="10dp">
        <shape Android:shape="rectangle">
            <solid Android:color="@color/white" />
        </shape>
    </item>
</layer-list>

上記のdrawableは、Android St​​udioプレビュー(2.0.0p7)で正しく表示されるnotであることに注意してください。とにかくプレビューするには、別のビューを作成し、これをAndroid:background="@drawable/..."として使用します。

8
Dev-iL

私はあなたのコードを試してみて、上部の丸い角のボタンを手に入れました。 @ffffffとして色を指定し、#C0C0C0としてストロークを指定しました。

試してみる

  1. Androidを与える:0ではなくbottomLeftRadius = "0.1dp"。機能しない場合
  2. ドローアブルの種類とエミュレーターの解像度を確認します。 resの下でそれを使用して描画可能なフォルダを作成しました。 (hdpi、mdpi ldpi)このXMLがあるフォルダー。これは私の出力です。

enter image description here

2
Arul T

これを読む必要があるかもしれません https://developer.Android.com/guide/topics/resources/drawable-resource.html#Shape

そして、下にメモがあります。

注すべてのコーナーには、(最初​​に)1より大きいコーナー半径を指定する必要があります。そうしないと、コーナーが丸くなりません。特定のコーナーを丸くしたくない場合、回避策はAndroid:radiusを使用してデフォルトのコーナー半径を1より大きい値に設定し、各コーナーを実際に必要な値でオーバーライドし、ゼロ( "0dp" )角を丸くしたくない場合。

1
lightman1988

drawableでroung_top_corners.xmlを作成し、以下のコードをコピーします

<shape xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:shape="rectangle" >
<corners
    Android:topLeftRadius="22dp"
    Android:topRightRadius="22dp"
    Android:bottomLeftRadius="0dp"
    Android:bottomRightRadius="0dp"
    />
<gradient
    Android:angle="180"
    Android:startColor="#1d2b32"
    Android:centerColor="#465059"
    Android:endColor="#687079"
    Android:type="linear" />
<padding
    Android:left="0dp"
    Android:top="0dp"
    Android:right="0dp"
    Android:bottom="0dp"
    />
<size
    Android:width="270dp"
    Android:height="60dp"
    /></shape>
1
Manoj Reddy