改变形状边框的颜色在运行时(Change shape border color at runtime

2019-08-03 05:58发布

我在我的文件夹绘制这种形状:

<?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>

这个定义与圆角的矩形,我可以应用它作为背景像这样任何面板: 机器人:背景=“@绘制/ round_corner_shape”。

问题来了:我有几个面板上我的应用程序,与外形一样的背景,但对于每个形状我想不同的边框(中风)的颜色。 我不想创建3种形状,唯一的区别是在笔触颜色。 是否有可能在运行时的行程量的变化?

Answer 1:

我有同样的问题。 就我而言,我有一个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是代表色,就像我们在XML文件中做一个int值。 在Java代码中,而不是“#”我们用“0X”在AARRGGBB格式来定义它。 例如,使用0xFF000000为100%不透明的黑色和0xFF0000FF为100%不透明的蓝色。 自从谷歌API的“有益”在这里解释这告诉INT颜色是“笔触颜色”。

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



Answer 2:

嗨,你可以尝试创建运行时的背景,那么你可以改变它,只要你想要的。

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);


文章来源: Change shape border color at runtime