如何在自定义适配器中更改可绘制形状的背景颜色
How to change background color of drawable shape in custom adapter
我的自定义列表视图项目中有一个按钮,我正在为其使用以下可绘制 xml 文件:
rounded_corner.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="120dp" android:layout_height="100dp">
<stroke
android:width="1dp"
android:color="#FFFFFF" />
<solid android:color="#002832" />
<padding
android:left="1dp"
android:right="1dp"
android:top="1dp" />
<corners android:radius="5dp" />
</shape>
我为该可绘制对象使用了“#002832”颜色。现在,我想以编程方式更改可绘制文件的颜色。我该怎么做?
请在不理解问题的情况下停止标记为重复。
我检查了@Ganesh Pokele SO link 和完全不同的。
我检查了@bizzard 提供的 link 但无法解决我的问题。
我在中详细描述了你想要的内容,如果我理解你的问题,你可能想查看一下。
基本上,您应该做的是创建 另一个 具有不同颜色的可绘制对象,并通过 yourView.setBackground(Drawable drawable):
以编程方式设置它
another_round_corner.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="120dp" android:layout_height="100dp">
<stroke
android:width="1dp"
android:color="#002832" />
<solid android:color="#002832" />
<padding
android:left="1dp"
android:right="1dp"
android:top="1dp" />
<corners android:radius="5dp" />
</shape>
然后随时将背景设置为此可绘制对象。
编辑
由于 OP 不想使用其他可绘制对象,因此解决方案是使用这样的滤色器:
button.getBackground().setColorFilter(Color.rgb(40, 50, 60), PorterDuff.Mode.SRC_ATOP);
你会得到想要的效果。 PorterDuff.Mode.SRC_ATOP
将在背景上应用您想要的颜色,在另一种颜色之上,而不混合它们。您必须在第一个参数中传递颜色(颜色将来自服务器)。如果它是十六进制,只需将其转换为 RGB,例如,或进行任何您需要的转换。
您始终可以像那样以编程方式更改可绘制颜色,如果它适合您,请告诉我。
如果对您有帮助,请告诉我,如果对您有帮助,请upvote/select作为正确答案,干杯。
解决方案
- 如果您想以编程方式动态更改可绘制颜色,请使用此代码。
这是我的xmlrectangle_border
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="@color/gray"
<corners android:topLeftRadius="5dp" android:bottomLeftRadius="5dp"
android:topRightRadius="5dp" android:bottomRightRadius="5dp"/>
<stroke android:color="@color/colorPrimary" android:width="1dp" />
</shape>
- 我这里是更改动态背景颜色
Drawable unwrappedDrawable = AppCompatResources.getDrawable(context, R.drawable.rectangle_border);
Drawable wrappedDrawable = DrawableCompat.wrap(unwrappedDrawable);
DrawableCompat.setTint(wrappedDrawable, Color.parseColor(textcolor));
//Here set the background in view
holder.textrectangle_bgLL.setBackgroundResource(R.drawable.rectangle_border);
我的自定义列表视图项目中有一个按钮,我正在为其使用以下可绘制 xml 文件:
rounded_corner.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="120dp" android:layout_height="100dp">
<stroke
android:width="1dp"
android:color="#FFFFFF" />
<solid android:color="#002832" />
<padding
android:left="1dp"
android:right="1dp"
android:top="1dp" />
<corners android:radius="5dp" />
</shape>
我为该可绘制对象使用了“#002832”颜色。现在,我想以编程方式更改可绘制文件的颜色。我该怎么做?
请在不理解问题的情况下停止标记为重复。
我检查了@Ganesh Pokele SO link 和完全不同的。
我检查了@bizzard 提供的 link 但无法解决我的问题。
我在
基本上,您应该做的是创建 另一个 具有不同颜色的可绘制对象,并通过 yourView.setBackground(Drawable drawable):
以编程方式设置它another_round_corner.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="120dp" android:layout_height="100dp">
<stroke
android:width="1dp"
android:color="#002832" />
<solid android:color="#002832" />
<padding
android:left="1dp"
android:right="1dp"
android:top="1dp" />
<corners android:radius="5dp" />
</shape>
然后随时将背景设置为此可绘制对象。
编辑
由于 OP 不想使用其他可绘制对象,因此解决方案是使用这样的滤色器:
button.getBackground().setColorFilter(Color.rgb(40, 50, 60), PorterDuff.Mode.SRC_ATOP);
你会得到想要的效果。 PorterDuff.Mode.SRC_ATOP
将在背景上应用您想要的颜色,在另一种颜色之上,而不混合它们。您必须在第一个参数中传递颜色(颜色将来自服务器)。如果它是十六进制,只需将其转换为 RGB,例如,或进行任何您需要的转换。
您始终可以像那样以编程方式更改可绘制颜色,如果它适合您,请告诉我。
如果对您有帮助,请告诉我,如果对您有帮助,请upvote/select作为正确答案,干杯。
解决方案
- 如果您想以编程方式动态更改可绘制颜色,请使用此代码。
这是我的xmlrectangle_border
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<solid android:color="@color/gray"
<corners android:topLeftRadius="5dp" android:bottomLeftRadius="5dp"
android:topRightRadius="5dp" android:bottomRightRadius="5dp"/>
<stroke android:color="@color/colorPrimary" android:width="1dp" />
</shape>
- 我这里是更改动态背景颜色
Drawable unwrappedDrawable = AppCompatResources.getDrawable(context, R.drawable.rectangle_border);
Drawable wrappedDrawable = DrawableCompat.wrap(unwrappedDrawable);
DrawableCompat.setTint(wrappedDrawable, Color.parseColor(textcolor));
//Here set the background in view
holder.textrectangle_bgLL.setBackgroundResource(R.drawable.rectangle_border);