Android - рисовать с закругленными углами только сверху - PullRequest
130 голосов
/ 19 января 2012

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

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

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

Ответы [ 7 ]

259 голосов
/ 19 января 2012

Попробуйте указать следующие значения:

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

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

РЕДАКТИРОВАТЬ: См. Aleks G комментарий ниже для более чистой версии

13 голосов
/ 06 апреля 2015

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

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

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

8 голосов
/ 05 апреля 2016

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

    <?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 голосов
/ 23 января 2016

Опираясь на ответ 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/...".

2 голосов
/ 19 января 2012

Я попробовал ваш код и получил кнопку с закругленными углами. Я дал цвета как @ffffff и удар, который я дал #C0C0C0.

попробуй

  1. Предоставление android: bottomLeftRadius = "0.1dp" вместо 0. Если он не работает
  2. Проверьте, что рисовать и разрешение эмулятора. Я создал нарисованную папку под res и использую ее. (hdpi, mdpi ldpi) папка у вас есть этот XML. это мой вывод.

enter image description here

1 голос
/ 14 декабря 2018

Создайте файл 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 голос
/ 29 мая 2016

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

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

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

...