Как нарисовать прямоугольник формы 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 программно