Почему я не могу создать круглую границу для определенного угла? - PullRequest
18 голосов
/ 06 декабря 2011

В макете «Мой android xml» я применяю границу, используя в качестве фона файл borderframe.xml.

Файл borderframe.xml выглядит следующим образом:

    <?xml version="1.0" encoding="UTF-8"?>
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke 
        android:width="1dip" 
        android:color="#ffffff"/>
    <solid 
        android:color="#95865F"/>
    <corners 
        android:radius="10px"/>

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

Сейчас, покаесть андроид: radius = "10px", тогда он работает, но пока я собираюсь придать круглую форму определенному углу только тогда, он не работает.В log cat нет сообщений об ошибках, но я обнаружил ошибку в eclipse, например:

    The graphics preview in the layout editor may not be accurate:
* Different corner sizes are not supported in Path.addRoundRect.

Даже если в этом xml-файле нет отступов, я также не вижу границы.

Теперь, что я должен сделать для этого?и каково его решение, если я хочу создать закругленную границу только для topLeftcorner и bottomLeftCorner.?Спасибо.

Ответы [ 4 ]

17 голосов
/ 01 апреля 2014

У меня тоже такая же проблема. Но для этого я использую layer-list. Я публикую здесь свой ответ, который может вам помочь.
Пожалуйста, проверьте экран вывода image 1

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item>
      <shape 
        android:shape="rectangle">
            <stroke android:width="1dp" android:color="#c1c1c1" />
            <solid android:color="#c1c1c1" />
            <corners android:radius="20dp"/>
        </shape>
   </item>

   <item android:right="20dp"
        >
      <shape 
        android:shape="rectangle">
            <stroke android:width="1dp" android:color="#c1c1c1" />
            <solid android:color="#c1c1c1" />
        </shape>
   </item>

</layer-list>
10 голосов
/ 06 декабря 2011

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

<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle">
  <corners
      android:radius="20sp"
      android:topRightRadius="0dp"
      android:bottomRightRadius="0dp"
      android:bottomLeftRadius="0dp" />
  <gradient
      android:startColor="@color/logo_blue"
      android:endColor="@color/blue"
      android:angle="0"/>
</shape>

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

Как следствие, вам необходимо определить свой чертеж:

<?xml version="1.0" encoding="UTF-8"?>
<shape 
    xmlns:android="http://schemas.android.com/apk/res/android">
    <stroke 
        android:width="1dip" 
        android:color="#ffffff"/>
    <solid 
        android:color="#95865F"/>
    <corners 
       android:radius="10px"
      android:topRightRadius="0dp"
      android:bottomRightRadius="0dp" />

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

Обновление

С Ресурс Drawable Resource Android-документация :

android: radius Dimension.Радиус для всех углов в качестве значения измерения или ресурса измерения.Это переопределяется для каждого угла следующими атрибутами.

переопределено - ключевое слово для вашей проблемы…

6 голосов
/ 14 июня 2012

Я использую SDK tools 19, platform-tools 11 и запускаю приложение в Android 4.0.3. Использование следующего XML работает для меня:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle">
    <solid android:color="#dd000000"/>
    <padding 
        android:left="7dp"
        android:top="7dp"
        android:right="7dp"
        android:bottom="7dp" />
    <corners
        android:bottomLeftRadius="25dp"
        android:bottomRightRadius="25dp"
        android:topLeftRadius="0dp"
        android:topRightRadius="0dp" />
</shape>

Предупреждение Eclipse о невозможности предварительного просмотра. В приложении он отображается правильно.

0 голосов
/ 28 мая 2016

Я получил решение на одном из форумов. Я решил это, комментируя каждый угол и добавляя в xml в drawable. Я сохранил закомментированный код ниже только для понимания.

XML Code-

   <?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
        <solid android:color="#fd2149" />
        <stroke android:width="1dip" android:color="#ffd102"/>
      <!--  <corners
            android:bottomLeftRadius="8dp"
            android:bottomRightRadius="8dp"
            android:topLeftRadius="8dp"
            android:topRightRadius="8dp" />
        -->
        <corners android:radius="8dp" />
    </shape>

--- Edited- Приведенный выше код - это мой back.xml в папке drawable, и при необходимости вы можете добавить заполнение к тому же back.xml. Для тех, кто является новым разработчиком, на файл back.xml ссылаются из файла макета следующим образом

  <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/tableLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:textSize="20sp"
    android:scrollbars="vertical"
    android:background="@drawable/back">

Надеюсь, это поможет.

...