首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在android中以编程方式更改向量的fillColor

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

Stack Overflow用户
提问于 2015-10-14 21:37:37
回答 7查看 36.2K关注 0票数 46

我想在Android中以编程方式编辑矢量文件的填充颜色。

在xml文件中,我可以使用属性android:fillColor设置颜色,但我想在运行时更改颜色。

有没有这样的例子?谢谢。

EN

回答 7

Stack Overflow用户

发布于 2016-07-17 12:59:33

This正是您所需要的。归功于这篇文章的作者@emmaguy。我刚刚添加了对Support Library 23.4+的完全支持,它使您能够在运行时停止生成pngs:

代码语言:javascript
复制
 // Gradle Plugin 2.0+  
 android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
   }  
 } 

如果在您的活动或应用程序的onCreate上设置了此行:

代码语言:javascript
复制
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);

您不仅可以在srcCompat中使用SVG,还可以在TextView、ToggleButton等中使用其他属性,如drawableLeftbackground等。如果在选择器上使用,它也可以工作。

注释:我修改了代码以使用VectorDrawableCompat.create而不是ResourcesCompat.getDrawable。否则它将无法工作并抛出org.xmlpull.v1.XmlPullParserException: Binary XML file line #2: invalid drawable tag vector

中帖子内容:

首先,我们为这两种装饰品创建属性,这样我们就可以改变它们的颜色:

代码语言:javascript
复制
<declare-styleable name="ChristmasTree">
    <attr name="bauble_round" format="color" />
    <attr name="bauble_small" format="color" />
</declare-styleable>

然后,在VectorDrawable中,设置要动态更改的部件以使用这些属性:

代码语言:javascript
复制
<path
    android:fillColor="?attr/bauble_round"
    android:pathData="...." />
<path
    android:fillColor="?attr/bauble_small"
    android:pathData="...." />
...

创建主题并设置要使用的颜色:

代码语言:javascript
复制
<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中使用可绘制:

代码语言:javascript
复制
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

票数 47
EN

Stack Overflow用户

发布于 2015-10-14 21:51:53

如果你想改变整个颜色,你可以应用一个PorterduffColorFilter。但这不适用于单个<path>。只适用于整个抽屉。

代码语言:javascript
复制
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

票数 24
EN

Stack Overflow用户

发布于 2017-05-17 13:13:17

setColorFilter()方法添加到您的图像内容向量(在API8中添加),如下所示:

代码语言:javascript
复制
imgshare = (Imageview) findviewbyId(R.id.imageshare);
imgshare.setColorFilter(color);
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33126904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档