Как нарисовать прямоугольник формы Android с переменной шириной обводки

Я хочу нарисовать прямоугольник с отверстием в нем. Я пытаюсь достичь этого с помощью Shape Rectangle.

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <stroke
        android:width="50dp"
        android:color="@color/red" />
</shape>

Я пытаюсь выяснить, как я могу изменить ширину обводки, когда этот прямоугольник рисуется так, чтобы Rectangle имел, например: ширину обводки 50 dp по верхним и нижним краям, но 20 dp по левому и правому краям.

Я очень ценю вашу помощь в этом.

3 ответа

Решение

Спасибо всем за вашу помощь. В итоге я переопределил onDraw(), чтобы очистить цвет фона макета для создания прямоугольного отверстия с помощью setXfermode().

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

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape android:shape="rectangle">
            <solid android:color="@android:color/transparent"/>
        </shape>
    </item>

    <item android:top="1dp">
        <shape android:shape="rectangle">
            <solid android:color="@android:color/holo_blue_bright"/>
        </shape>
    </item>

    <item android:left="3dp">
        <shape android:shape="rectangle">
            <gradient android:angle="270" android:startColor="#8C2300" android:endColor="#D34617"/>
        </shape>
    </item>

    <item android:right="8dp">
        <shape android:shape="rectangle">
            <gradient android:angle="270" android:startColor="#000000" android:endColor="#ffc0cb"/>
        </shape>
    </item>

</layer-list>

назовите этот файл чем-то вроде layer.xml в вашей папке drawable. затем примените это как фон к своему представлению как это:

android:background="@drawable/shape"

Я предполагаю, что форма используется в качестве фона представления (например, imageView). Итак, сначала получите Drawable объект из imageView и получить Paint возражать от этого. Затем вы можете изменить любое свойство, которое вы хотите.

Drawable background = imageView.getBackground();
if (background instanceof ShapeDrawable) {
    // cast to 'ShapeDrawable'
    ShapeDrawable shapeDrawable = (ShapeDrawable)background;
    shapeDrawable.getPaint().setStrokeWidth(...);
}

Связанный вопрос здесь: Установите цвет формы Android программно

Другие вопросы по тегам