2012-10-10 3 views
1

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

Edit: Я могу нарисовать прямоугольник:

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> 

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

+0

Ваш вопрос немного неясно. Не могли бы вы попытаться отредактировать его, чтобы быть более кратким в том, что вы просите? – Mutmatt

ответ

5

Вы можете загрузить и использовать 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 

} 
+0

Большое спасибо ... Я пытаюсь использовать его! –

+0

он должен быть отправлен в GradientDrawable, а не в ShapeDrawable, потому что он будет вызывать ошибку java.lang.ClassCastException: android.graphics.drawable.GradientDrawable –

+0

Звучит правдоподобно. Когда я изначально написал свой ответ, XML не был включен в вопрос. На самом деле вам не нужно вообще бросать его, если вы не используете ничего конкретного для реализации. –