在运行时更改形状边框颜色

时间:2012-11-27 13:39:14

标签: android xml-drawable

我在drawable文件夹中有这个形状:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <corners android:radius="5dp" />
    <solid android:color="#ffffff" />
    <stroke android:width="2dp" android:color="#B5B5B5"/>
</shape>

这定义了一个带圆角的矩形,我可以将它作为背景应用于任何面板,如下所示: android:background =“@ drawable / round_corner_shape”

问题在于:我的应用程序中有几个面板,形状与背景相同,但对于每个形状,我想要一个不同的边框(笔触)颜色。我不想创建3个形状,唯一的区别在于笔触颜色。 是否可以在运行时更改笔画值?

2 个答案:

答案 0 :(得分:17)

我遇到了同样的问题。 在我的例子中,我有一个GridView,网格中的项目可以在运行时由用户更改边框颜色。

因此,在该网格的gridviewAdapter中,我在getView方法中执行了以下操作(生成适配器视图的方法)

public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    convertView = inflater.inflate(R.layout.griditem, null);
    GradientDrawable gradientDrawable = (GradientDrawable) convertView.getBackground(); 

    gradientDrawable.setStroke(2, mColor); 
    convertView.invalidate();
    return convertView;
}

mColor是一个表示颜色的int,就像我们在xml文件中一样。 在java代码中,我们使用“0x”代替“#”来定义AARRGGBB格式。 例如,对于100%不透明BLACK使用0xFF000000,对于100%不透明BLUE使用0xFF0000FF。 在这里解释这个,因为谷歌api'有帮助'告诉int颜色是“中风的颜色”。

这解决了我的问题...我想你可以尝试类似的事情。

答案 1 :(得分:1)

您好,您可以尝试在运行时创建背景,然后您可以随时更改它。

RoundRectShape rect = new RoundRectShape(
  new float[] {30,30, 30,30, 30,30, 30,30},
  null,
  null);
ShapeDrawable bg = new ShapeDrawable(rect);
bg.getPaint().setColor(0x99FFFFFF);
view.setBackgroundDrawable(bg);