我想以编程方式在 Android 中编辑矢量文件的填充颜色。
在 xml 文件中,我可以使用属性设置颜色 android:fillColor 但我想在运行时更改颜色。
有什么例子吗?谢谢。
最佳答案
This正是您所需要的。致@emmaguy ,帖子的作者。我刚刚添加了 Support Library 23.4+ 的完整支持,这使您可以在运行时停止生成 png:
// Gradle Plugin 2.0+
android {
defaultConfig {
vectorDrawables.useSupportLibrary = true
}
}
如果在您的 Activity 或应用程序的 onCreate 上设置了这一行:
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
您不仅可以将 SVG 与 srcCompat
一起使用,还可以与 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获取完整样本。
关于android - 以编程方式更改android中向量的fillColor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33126904/