Как создать форму с твердым, угловым, штриховым кодом в Java-коде?
У меня есть форма, определенная в xml файле ниже, теперь я хочу программно изменить на сплошной цвет.
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="#DFDFE0" />
<corners
android:bottomLeftRadius="8dp"
android:bottomRightRadius="8dp"
android:topLeftRadius="8dp"
android:topRightRadius="8dp" />
<stroke
android:width="3dp"
android:color="#2E3135" />
</shape>
Я думаю, у меня должен быть класс, который расширяет ShapeDrawable и реализует метод onDraw. Кто-нибудь знает как?
Ответы
Ответ 1
Наконец, я это выработает!
// prepare
int strokeWidth = 5; // 3px not dp
int roundRadius = 15; // 8px not dp
int strokeColor = Color.parseColor("#2E3135");
int fillColor = Color.parseColor("#DFDFE0");
GradientDrawable gd = new GradientDrawable();
gd.setColor(fillColor);
gd.setCornerRadius(roundRadius);
gd.setStroke(strokeWidth, strokeColor);
Ответ 2
Я бы предпочел сделать форму в форме и добавить обивку к внутренней форме...
Вот так:
<?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="#2E3135" />
<corners
android:bottomLeftRadius="8dp"
android:bottomRightRadius="8dp"
android:topLeftRadius="8dp"
android:topRightRadius="8dp" />
</shape>
</item>
<item
android:bottom="3dp"
android:left="3dp"
android:right="3dp"
android:top="3dp">
<shape android:shape="rectangle">
<solid android:color="#DFDFE0" />
<corners
android:bottomLeftRadius="5dp"
android:bottomRightRadius="5dp"
android:topLeftRadius="5dp"
android:topRightRadius="5dp" />
</shape>
</item>
</layer-list>
UPDATE:
Я обнаружил, что углы внутренней формы должны быть меньше для лучшего обзора... Для разных пропорций вам нужно будет проверить, какой внутренний радиус, внешний радиус и размер хода (прокладка) лучше всего подходит для вашего решения.