2015-05-20 1 views
1

Итак, я создал этот рисованный XML-файл rounded_rect. Я изначально задал свой цвет красным. Однако я хочу иметь возможность изменить этот цвет в моем файле макета.Изменение цвета формы в xml-файле с возможностью рисования через макет

rounded_rect.xml

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle" android:padding="10dp"> 
<solid android:color="#ffff1900"/> 
<corners 
    android:bottomRightRadius="15dp" 
    android:bottomLeftRadius="15dp" 
    android:topLeftRadius="15dp" 
    android:topRightRadius="15dp"/> 

<stroke android:width="4dp" 
    android:color="#000000"/> 
</shape> 

Мой файл макета содержит настраиваемый вид под названием ItemView. Один из моих пользовательских атрибутов - цвет фона.

<custonview.android.example.com.customview.ItemView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    custom:imagePath="@drawable/yes" 
    custom:text="Yes" 

    custom:backgroundColor="#000000" 

    android:layout_row="0" 
    android:layout_column="0" 
    android:background="@drawable/rounded_rect_green" 
    android:layout_margin="30dp" /> 

Цель состоит в том, чтобы быть в состоянии изменить цвет в моем вытяжке файл с цветом я присвоенной в моем файле макета. Вот мой ItemView.java файл

public class ItemView extends View { 

    //attributes of item view 
    private Drawable drawable; 
    private String text; 
    private int backgroundColor; 

    private int width, height; 
    private Paint paint; 

    public ItemView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     TypedArray a = context.getTheme().obtainStyledAttributes(attrs, 
       R.styleable.ItemView, 0, 0); 
     try { 
      text = a.getString(R.styleable.ItemView_text); 
      backgroundColor = a.getInteger(R.styleable.ItemView_backgroundColor, 0); 
      drawable = a.getDrawable(R.styleable.ItemView_imagePath); 
     } finally { 

     } 
     paint = new Paint(); 
     width = drawable.getMinimumWidth()/2; 
     height = drawable.getMinimumHeight()/2; 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     setMeasuredDimension(width, height); 
    } 

    @Override 
    protected void onDraw(Canvas canvas) { 
     //positions the image in the middle horizontally and a little above the text below 
     drawable.setBounds(width/4, height/4 - 50, width - (width/4), 
       height - (height/4) - 50); 
     drawable.draw(canvas); 

     paint.setTextSize(100); 
     paint.setColor(Color.BLACK); 
     canvas.drawText(text, width/2 - 
       paint.measureText(text, 0, text.length())/2, height - 50, paint); 
    } 
} 
  • Может быть, я над созерцая его. Бесплатно, чтобы быть творческим в ваших ответах. Заранее благодарю вас

ответ

0

Вам нужно будет создать отдельные чертежи для каждого цвета, так как нет возможности установить эти атрибуты во время выполнения - потому что приложение должно будет их скомпилировать.

1

Попробуйте ниже code-

GradientDrawable bgShape = (GradientDrawable)yourview.getBackground(); 
     bgShape.setColor(Color.MAGENTA);