2015-05-20 37 views
1

因此,我创建了这个名为rounded_rect的可绘制xml文件。我最初将它的颜色设置为红色。不过,我希望能够在我的布局文件中更改此颜色。通过布局更改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

您必须为每种颜色创建单独的drawable,因为在运行时无法设置这些属性 - 因为应用程序将不得不编译它们。

1

尝试下面的代码 -

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