Подтвердить что ты не робот

Android: рисование пользовательских фигур

Я хочу нарисовать пользовательскую форму, подобную этой, - Custom Shape.

Один из вариантов состоит в том, чтобы сделать каждую форму в фотошопе индивидуально, а затем использовать ее в кодировке, но я хочу знать, что можно сделать это с помощью xml?

Как мне нарисовать форму? Не ожидайте полного кода, просто дайте мне идею или укажите мне в правильном направлении.

4b9b3361

Ответ 1

Попробуйте выполнить следующую форму: xml:

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

<!-- Colored rectangle-->
<item>
    <shape android:shape="rectangle">
        <size 
            android:width="100dp"
            android:height="40dp" />
        <solid android:color="#FAD55C" />
    </shape>
</item>

<!-- This rectangle for the left side -->
<!-- Its color should be the same as layout -->
<item
    android:right="90dp"
    android:left="-30dp">
    <rotate
        android:fromDegrees="45">
        <shape android:shape="rectangle">
            <solid android:color="#ffffff" />
        </shape>
    </rotate>
</item>

<!-- These rectangles for the right side -->
<!-- Their color should be the same as layout -->
<item
    android:top="-40dp"
    android:bottom="63dp"
    android:right="-25dp">
    <rotate
        android:fromDegrees="45">
        <shape android:shape="rectangle">
            <solid android:color="#ffffff" />
        </shape>
    </rotate>
</item>

<item
    android:top="63dp"
    android:bottom="-40dp"
    android:right="-25dp">
    <rotate
        android:fromDegrees="-45">
        <shape android:shape="rectangle">
            <solid android:color="#ffffff" />
        </shape>
    </rotate>
</item>
</layer-list>

Как это выглядит на белом фоне:

enter image description here

Подробнее о Shape Drawables.

EDIT:

Ниже приводится небольшое объяснение того, как это делается.

  • Мы помещаем желтый прямоугольник размером 100 x 40 dp. С этого момента этот прямоугольник можно рассматривать как контейнер для остальных фигур. Пограничники контейнера считаются источниками для границ форм, которые мы собираемся разместить в контейнере. А именно, установка атрибутов top, bottom, right and left тега size формы означает расстояние от границ формы до top, bottom, right and left краев контейнера (желтый прямоугольник).

Например, если мы хотим разместить меньший прямоугольник внутри желтого с пробелом 10dp от каждого края желтого прямоугольника, мы бы установили атрибуты top, bottom, right and left равными 10dp для нового (внутреннего) прямоугольник.

  1. Чтобы получить стрелочную форму для правой части желтого прямоугольника, мы используем два белых прямоугольника, которые соответствующим образом перемещаются вправо и поворачиваются. Обратите внимание: значения атрибута тега size могут быть отрицательными, что означает, что соответствующий край формы появляется вне контейнера. В предыдущем примере, если вы установили, скажем, атрибут left, равный 100 dp или выше, внутренний прямоугольник не будет отображаться, потому что он будет за правой границей желтого.

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

  1. Для левой формы формы достаточно использовать только один прямоугольник, перемещенный влево (частично снаружи контейнера) и повернутый на 45 градусов.

Надеюсь, это вас не смутило.