Android-рисование с закругленными углами только в верхней части


у меня был этот drawable, чтобы иметь закругленный прямоугольник в качестве фона:

<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>

но теперь ни один из углов не закруглен, и я получаю простой прямоугольник. Чего мне здесь не хватает?

6 110

6 ответов:

попробуйте дать эти значения:

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

обратите внимание, что я изменил 0dp to 0.1dp.

редактировать: см.Алекс Гкомментарий ниже для более чистой версии

попробовать сделать что-то вроде этого:

<?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>

Кажется, не подходит для установки разного радиуса угла прямоугольника. Так что вы можете использовать этот хак.

на ответ busylee, это, как вы можете сделать drawable это только один unзакругленный угол (вверху слева, в этом примере):

<?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 Studio (2.0.0p7). Чтобы просмотреть его в любом случае, создайте другой вид и используйте его как android:background="@drawable/...".

в моем случае ниже код

    <?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>

Я попробовал ваш код. у меня есть верхняя закругленная угловая кнопка. я дал цвета, как @ffffff и srtoke я дал #C0C0C0. попробуйте 1) дать android:bottomLeftRadius="0.1 dp" вместо 0. если он не работает 2)проверьте, что рисуется и разрешение эмуляторов. я создал рисованную папку под res и использовал ее. (hdpi, mdpi ldpi) папка у вас есть этот xml. это мой выход

enter image description here

вам может понадобиться прочитать это https://developer.android.com/guide/topics/resources/drawable-resource.html#Shape

и ниже есть примечание.

Примечание каждый угол должен (изначально) иметь радиус угла больше 1, иначе никакие углы не будут скруглены. Если вы хотите, чтобы определенные углы не были закруглены, обходной путь должен использовать android: radius, чтобы установить радиус угла по умолчанию больше 1, но затем переопределить каждый угол со значениями, которые вы очень хочу, обеспечивая ноль ("0dp"), где вы не хотите закругленные углы.