android - 以编程方式更改android中向量的fillColor

标签 android vector android-vectordrawable

我想以编程方式在 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 中的 drawableLeftbackground 等其他属性一起使用等等。如果在选择器上使用,它也可以工作。

注意:我修改了代码以使用 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/

相关文章:

android - Retrofit 2、GSON 和自定义解串器

c++ - 如何在 C++ 中创建没有硬编码循环的多个 vector 的组合?

c++ - 将 2D vector 转换为 C 类型的最佳方法(对于 SGX enclave)

android - 带有矢量拉伸(stretch)全屏的 SplashScreen

android - 自定义 View 上的可绘制标签向量无效

android - 在代码中使用资源中的 VectorDrawable

java - 应用程序上下文使用 Dagger?

android - 自定义项的数据绑定(bind)列表

android - 背景有问题 :@drawable/img

C++ 如何在不使用标准库中的洗牌函数的情况下洗牌 vector ?