Как сделать форму с левым верхним округлым углом и левым нижним закругленным углом?

Я хочу сделать форму с закругленным левым верхним углом и левым нижним закругленным углом:

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid android:color="#555555"/>    

    <stroke android:width="3dp"
            android:color="#555555"
            />

    <padding android:left="1dp"
             android:top="1dp"
             android:right="1dp"
             android:bottom="1dp"
             /> 

    <corners android:bottomRightRadius="0dp" android:bottomLeftRadius="2dp" 
     android:topLeftRadius="2dp" android:topRightRadius="0dp"/> 
</shape>

Но приведенная выше форма не дала мне того, чего я хочу. Это дает мне прямоangularьник без каких-либо закругленных углов.

Ответ 1

Хотя этот вопрос уже ответил (это ошибка, которая приводит к обратному методу bottomLeftRadius и bottomRightRadius), ошибка была исправлена ​​в android 3.1 (уровень 12 api - протестирован на эмуляторе).

Итак, чтобы убедиться, что ваши чертежи выглядят корректно на всех платформах, вы должны поместить "исправленные" версии чертежей (т.е. когда нижние левые/правые радиусы действительно правильны в xml) в папке res/drawable-v12 вашего приложение. Таким образом, все устройства, использующие версию android version >= 12, будут использовать правильные файлы для рисования, тогда как устройства, использующие старые версии андроида, будут использовать "обходные" чертежи, которые находятся в папке res/drawables.

Ответ 2

Похоже на ошибку http://code.google.com/p/android/issues/detail?id=939.

Наконец, я должен написать что-то вроде этого:

       

 <stroke android:width="3dp"
         android:color="#555555"
         />

 <padding android:left="1dp"
          android:top="1dp"
          android:right="1dp"
          android:bottom="1dp"
          /> 

 <corners android:radius="1dp"
  android:bottomRightRadius="2dp" android:bottomLeftRadius="0dp" 
  android:topLeftRadius="2dp" android:topRightRadius="0dp"/> 

Мне нужно указать андроид: bottomRightRadius = "2dp" для закругленного угла слева внизу (другая ошибка здесь).

Ответ 3

Из документации:

ПРИМЕЧАНИЕ. Каждый angular должен (изначально) иметь радиус угла больше 1, иначе углы не будут скруглены. Если вы хотите конкретный углы не должны быть закруглены, обходной путь должен использовать Android: радиус установить angular радиус по умолчанию больше 1, но затем переопределить каждый и каждый angular со значениями, которые вы действительно хотите, обеспечивая ноль ("0dp") где вы не хотите закругленные углы.

Например. Вы должны установить android:radius="<bigger than 1dp>", чтобы иметь возможность делать то, что вы хотите:

<corners 
    android:radius="2dp"
    android:bottomRightRadius="0dp" 
    android:topRightRadius="0dp"/> 

Ответ 4

Вы также можете использовать чрезвычайно маленькие цифры для своего радиуса.

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

Ответ 5

для других есть решение для любого уровня API, вы можете поместить элемент поверх каждого другого примера:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >

<!-- my firt item with 4 corners radius(8dp)
 -->
    <item>
        <shape>
            <solid
                android:angle="270.0"
                android:color="#3D689A" />

            <corners android:topLeftRadius="8dp" />
        </shape>
    </item>
<!-- my second item is on top right for a fake corner radius(0dp)
 -->
    <item
        android:bottom="30dp"
        android:left="50dp">
        <shape>
            <solid android:color="#5C83AF" />
        </shape>
    </item>
<!-- my third item is on bottom left for a fake corner radius(0dp)
 -->
    <item
        android:right="50dp"
        android:top="30dp">
        <shape>
            <solid android:color="#5C83AF" />
        </shape>
    </item>

</layer-list>

результат со светлым цветом, чтобы показать вам три элемента:

введите описание изображения здесь

конечный результат:

введите описание изображения здесь

С уважением.

Ответ 6

Эта ошибка зарегистрирована здесь. Это ошибка Android-устройств с уровнем API ниже 12. Вы должны поместить правильные версии ваших макетов в папку drawable-v12, которая будет использоваться для API уровня 12 или выше. И ошибочная версия (углы переключаются/меняются местами) того же макета будет помещена в папку для рисования по умолчанию, которая будет использоваться устройствами с уровнем API ниже 12.

Например: мне нужно было создать кнопку с закругленным углом внизу справа.

В папке drawable - button.xml: мне пришлось сделать левый нижний angular закругленным.

<shape>
    <corners android:bottomLeftRadius="15dp"/>
</shape>

В папке drawable-v12 - button.xml: Здесь размещена правильная версия макета для использования с API уровня 12 или выше.

<shape>
    <corners android:bottomLeftRadius="15dp"/>
</shape>

Ответ 7

попробуйте это

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="@color/upkia"/>
<corners android:radius="10dp"
    android:topRightRadius="0dp"
    android:bottomRightRadius="0dp" />
</shape>