Нарисуйте прямоугольник с настройками формы XML в Android

У меня проблема, которую я не знаю, как решить. Пожалуйста, помогите мне, если сможете. В моем приложении мне нужно создать расширенный вид пользовательского представления. В этом представлении я должен нарисовать много прямоугольников и создать их с помощью canvas.drawRect или canvas.drawRoundRect. Ясно. Но я хочу создать составной дизайн этих прямоугольников (с градиентами, углами, отступами и т. Д.), И я хочу выполнить эти настройки (градиенты, углы, отступы и т. Д.) В XML. Как я могу это сделать? Проблема в том, что я определяю форму в XML. Я могу использовать эту возможность рисования только в качестве фона, но когда я рисую прямоугольник, я не могу установить фон для прямоугольника. Может есть другой способ решить проблему. Могу ли я использовать объект формы XML для установки не только в качестве фона, но и для объекта представления с координатами x, y и шириной, высотой?

Изменить: я могу нарисовать прямоугольник:

canvas.drawRect(x1, y1, x2, y2, paint);

но у меня есть настройки прямоугольника в XML следующим образом:

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">

<!-- Specify a gradient for the background -->
    <gradient
    android:angle="90"
    android:startColor="#55000066"
    android:centerColor="#FFFFFF"
    android:endColor="#55000066" />

<!-- Specify a dark blue border -->
    <stroke 
    android:width="2dp"
    android:color="#000066" />

<!-- Specify the margins that all content inside the drawable must adhere to -->
    <padding
    android:left="5dp"
    android:right="5dp"
    android:top="5dp"
    android:bottom="5dp" />

<corners
    android:topLeftRadius="10dp"
    android:topRightRadius="10dp"
    android:bottomLeftRadius="10dp"
    android:bottomRightRadius="10dp" />
</shape>

и я хочу применить эти настройки к своему прямоугольнику. Как?


person Alex Zezekalo    schedule 10.10.2012    source источник
comment
Ваш вопрос немного непонятен. Не могли бы вы попытаться отредактировать его, чтобы он был более кратким в том, о чем вы просите?   -  person Mutmatt    schedule 10.10.2012


Ответы (1)


Вы можете загрузить и использовать определенный XML-код, который можно рисовать из кода, например:

public class CustomView extends View {

    Drawable shape;

    public CustomView(Context context) {
        super(context);
        shape = context.getResources().getDrawable(R.drawable.shape);
    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);

        shape.setBounds(left, top, right, bottom);
        shape.draw(canvas)
    }

    // ... Additional methods omitted for brevity

}
person nEx.Software    schedule 10.10.2012
comment
он должен быть преобразован в GradientDrawable, а не в ShapeDrawable, потому что будет выдана ошибка java.lang.ClassCastException: android.graphics.drawable.GradientDrawable - person Alex Zezekalo; 10.10.2012
comment
Звучит правдоподобно. Когда я изначально писал свой ответ, XML не был включен в вопрос. На самом деле вам вообще не нужно приводить его, если вы не используете ничего специфического для реализации. - person nEx.Software; 10.10.2012
comment
Если бы мой ответ был полезен, было бы здорово, если бы вы указали это, проголосовав за и / или отметив его как правильное. - person nEx.Software; 11.10.2012