我想在Android中以编程方式编辑矢量文件的填充颜色。
在xml文件中,我可以使用属性android:fillColor设置颜色,但我想在运行时更改颜色。
有没有这样的例子?谢谢。
发布于 2016-07-17 12:59:33
This正是您所需要的。归功于这篇文章的作者@emmaguy。我刚刚添加了对Support Library 23.4+的完全支持,它使您能够在运行时停止生成pngs:
// Gradle Plugin 2.0+
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
如果在您的活动或应用程序的onCreate上设置了此行:
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
您不仅可以在srcCompat
中使用SVG,还可以在TextView、ToggleButton等中使用其他属性,如drawableLeft
、background
等。如果在选择器上使用,它也可以工作。
注释:我修改了代码以使用VectorDrawableCompat.create
而不是ResourcesCompat.getDrawable
。否则它将无法工作并抛出org.xmlpull.v1.XmlPullParserException: Binary XML file line #2: invalid drawable tag vector
。
中帖子内容:
首先,我们为这两种装饰品创建属性,这样我们就可以改变它们的颜色:
<declare-styleable name="ChristmasTree">
<attr name="bauble_round" format="color" />
<attr name="bauble_small" format="color" />
</declare-styleable>
然后,在VectorDrawable中,设置要动态更改的部件以使用这些属性:
<path
android:fillColor="?attr/bauble_round"
android:pathData="...." />
<path
android:fillColor="?attr/bauble_small"
android:pathData="...." />
...
创建主题并设置要使用的颜色:
<style name="UpdatedScene" parent="DefaultScene">
<item name="bauble_round">#db486e</item>
<item name="bauble_small">#22c7f7</item>
</style>
<style name="DefaultScene">
<item name="bauble_round">#fec758</item>
<item name="bauble_small">#f22424</item>
</style>
在ImageView中使用可绘制:
final ContextThemeWrapper wrapper = new ContextThemeWrapper(this, R.style.DefaultScene);
final Drawable drawable = VectorDrawableCompat.create(getResources(), R.drawable.christmas, wrapper.getTheme());
imageView.setImageDrawable(drawable);
就这样!当你想改变颜色时,只需设置一个不同的主题,你的绘图就会更新。有关完整示例,请参阅GitHub repo。
发布于 2015-10-14 21:51:53
如果你想改变整个颜色,你可以应用一个PorterduffColorFilter。但这不适用于单个<path>
。只适用于整个抽屉。
public void applyThemeToDrawable(Drawable image) {
if (image != null) {
PorterDuffColorFilter porterDuffColorFilter = new PorterDuffColorFilter(Color.BLUE,
PorterDuff.Mode.SRC_ATOP);
image.setColorFilter(porterDuffColorFilter);
}
}
VectorDrawable扩展了Drawable类。See Docs
发布于 2017-05-17 13:13:17
将setColorFilter()
方法添加到您的图像内容向量(在API8中添加),如下所示:
imgshare = (Imageview) findviewbyId(R.id.imageshare);
imgshare.setColorFilter(color);
https://stackoverflow.com/questions/33126904
复制相似问题