Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/225.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以编程方式更改android中向量的填充颜色_Android_Vector_Android Vectordrawable - Fatal编程技术网

以编程方式更改android中向量的填充颜色

以编程方式更改android中向量的填充颜色,android,vector,android-vectordrawable,Android,Vector,Android Vectordrawable,我想以编程方式编辑Android中矢量文件的填充颜色 在xml文件中,我可以使用属性设置颜色 android:fillColor但我想在运行时更改颜色 有这样的例子吗?谢谢。如果您想更改整个颜色,可以应用PorterDuffColor过滤器。 但这对单个不起作用。只适用于整个可拉丝的 public void applyThemeToDrawable(Drawable image) { if (image != null) { PorterDuffColorFilter p

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

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


有这样的例子吗?谢谢。

如果您想更改整个颜色,可以应用PorterDuffColor过滤器。 但这对单个
不起作用。只适用于整个可拉丝的

public void applyThemeToDrawable(Drawable image) {
    if (image != null) {
        PorterDuffColorFilter porterDuffColorFilter = new PorterDuffColorFilter(Color.BLUE,
                PorterDuff.Mode.SRC_ATOP);

        image.setColorFilter(porterDuffColorFilter);
    }
}
VectorDrawable扩展了Drawable类

正是您所需要的。这篇文章的作者。我刚刚添加了对的完全支持,它使您能够在运行时停止生成PNG:

 // Gradle Plugin 2.0+  
 android {  
   defaultConfig {  
     vectorDrawables.useSupportLibrary = true  
   }  
 } 
如果在活动或应用程序的onCreate上设置了此行:

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
您不仅可以将SVG与
srcCompat
一起使用,还可以与其他属性一起使用,如文本视图中的
drawableLeft
background
等、切换按钮等。如果在选择器上使用,它也可以工作

注意:我将代码修改为使用
VectorDrawableCompat.create
而不是
ResourcesCompat.getDrawable
。否则它将无法工作并抛出
org.xmlpull.v1.XmlPullParserException:二进制XML文件行#2:无效的可绘制标记向量


中等帖子内容: 首先,我们为这两种饰品创建属性,以便我们可以更改它们的颜色:

<declare-styleable name="ChristmasTree">
    <attr name="bauble_round" format="color" />
    <attr name="bauble_small" format="color" />
</declare-styleable>
就这样!当你想改变颜色,只需设置一个不同的主题,你的绘图将更新。
有关完整示例,请参阅GitHub。

setColorFilter()
方法添加到图像内容向量(在api级别8中添加),如下所示:

imgshare = (Imageview) findviewbyId(R.id.imageshare);
imgshare.setColorFilter(color);
setColorFilter(getResources().getColor(R.color.YOUR_color))

例如:


不喜欢setColorFilter(getResources().getColor(R.color.grey))

这些答案都不适用于在运行时更改drawable中向量路径的颜色。事实上,我仍然没有弄明白这一点,但我认为这个答案会帮助很多人,他们只是试图在运行时创建和绘制一个简单的形状

我试图创建一个自定义边框Mvvm绑定,以便在运行时自定义按钮的边框和填充颜色。有一段时间,我试图修改一个Android drawable来实现这一点,但发现这是不可能的。最终我找到了如何使用GradientDrawable实现这一点

我在C#中使用Xamarin.Android,因此它看起来确实与Java略有不同

GradientDrawable gd = new GradientDrawable();
gd.SetColor(Color.Red);
gd.SetCornerRadius(10);

gd.SetStroke(3, Color.White);

view.Background = gd;

若要更改向量的颜色,请不要更改填充颜色。相反,以编程方式更改色调,这将做同样的事情,并为您节省大量时间!请参阅。

是否有任何其他解决方案可以只对单个
进行着色。所以我想你不能通过编程改变单路径的颜色。至少不要完全随机的颜色。仅对于定义为XML转换的固定集,您始终可以在单独的图像中分割路径,覆盖这些视图,然后在各个视图上设置过滤器。在所有情况下都不理想,但对一些人来说,这很好。这是我们现在所做的,但在提出问题时,我们没有想到。但请记住,每次拆分时,这将使使用的内存加倍。大多数时候都没什么大不了的,但有时候这可能很重要。。你找到解决办法了吗??。。我也面临同样的问题。你可以使用android:tint在运行时使用SetColorFilter在XML中更改矢量文件的颜色。完整答案的博客非常有效,应该被接受为答案。我无法访问此链接,你可以更新它或给我另一个链接吗?仅供参考:请仔细阅读文档“此功能默认为禁用,因为启用它可能会导致内存使用问题…”快乐编码。这对API<21不起作用,因为您不能在
fillColor
属性上使用类似
?attr/colorPrimary
的值…@AlanNelson您可以通过这样做来实现,例如:
final Resources.Theme=getResources().newTheme();theme.applyStyle(R.style.BaubleRound,false)
final ContextThemeWrapper wrapper = new ContextThemeWrapper(this, R.style.DefaultScene);
final Drawable drawable = VectorDrawableCompat.create(getResources(), R.drawable.christmas, wrapper.getTheme());
imageView.setImageDrawable(drawable);
imgshare = (Imageview) findviewbyId(R.id.imageshare);
imgshare.setColorFilter(color);
GradientDrawable gd = new GradientDrawable();
gd.SetColor(Color.Red);
gd.SetCornerRadius(10);

gd.SetStroke(3, Color.White);

view.Background = gd;