当前位置: 首页 > 知识库问答 >
问题:

如何为ImageView加载的SVG图像设置色调颜色

澹台文博
2023-03-14

我尝试将PNG图像表单drawable加载到ImageView中,并使用下面的代码设置此ImageView的着色颜色⇒ 它正在工作:

imageView1.setImageResource(R.drawable.pngFile);
imageView1.setColorFilter(getResources().getColor(R.color.colorAccent), android.graphics.PorterDuff.Mode.MULTIPLY);

我想使用Glide将SVG图像加载到ImageView中,并为其设置着色颜色。但在成功地将SVG图像加载到imageView后,setColorFilter无法工作。

我可以使用Glide将SVG图像加载到另一个ImageView中,代码如下:

// Setup RequestBuilder
requestBuilder = Glide.with(mActivity)
.using(Glide.buildStreamModelLoader(Uri.class, mActivity), 
InputStream.class)
.from(Uri.class)
.as(SVG.class)
.transcode(new SvgDrawableTranscoder(), PictureDrawable.class)
.sourceEncoder(new StreamEncoder())
.cacheDecoder(new FileToStreamDecoder<SVG>(new SvgDecoder()))
.decoder(new SvgDecoder())
.placeholder(R.drawable.ic_facebook)
.error(R.drawable.ic_web)
.animate(android.R.anim.fade_in)
.listener(new SvgSoftwareLayerSetter<Uri>());

// Use RequestBuilder with uri
Uri uri = Uri.parse("http://upload.wikimedia.org/wikipedia/commons/e/e8/Svg_example3.svg");
requestBuilder
.diskCacheStrategy(DiskCacheStrategy.SOURCE)
.load(uri)
.into(imageView2);

现在,我想更改mageView2的色调(在成功地将SVG图像加载到imageView2之后),我尝试了以下代码,但它不起作用:

imageView2.setColorFilter(getResources().getColor(R.color.colorAccent), android.graphics.PorterDuff.Mode.MULTIPLY);

共有3个答案

张啸
2023-03-14

如何通过Glide下载SVG的完整指南:

1) 在gradle文件中包括以下库:

实现"com.github.bumptech.glide: glide:$glideVersion"kapt"com.github.bumptech.glide:编译器:$glideVersion"实现"com.caverock: androidsvg-aar: 1.4

2)从Glide SVG采样器下载文件。

3) 修改SVGDrawableTrancoder类以将PictureDrawable转换为BitmapDrawable,因为PictureDrawable无法应用颜色过滤器:

public class SvgDrawableTranscoder implements ResourceTranscoder<SVG, Drawable> {
  @Nullable
  @Override
  public Resource<Drawable> transcode(
      @NonNull Resource<SVG> toTranscode, @NonNull Options options) {
    SVG svg = toTranscode.get();
    Picture picture = svg.renderToPicture();
    PictureDrawable drawable = new PictureDrawable(picture);

    Bitmap returnedBitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(),Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(returnedBitmap);
    canvas.drawPicture(drawable.getPicture());
    Drawable d = new BitmapDrawable(PlatformApp.Companion.getInstance().getResources(), returnedBitmap);
    return new SimpleResource<>(d);
  }
}
龚永新
2023-03-14

可以使用android.support.v7.widget.AppCompatImageView替换ImageView并使用

DrawableCompat.setTint(imvageView.getDrawable(), getResources().getColor(R.color.yourcolor));
皇甫智明
2023-03-14

如果您使用的是图标,那么这可能会很有用:

android:tint="@color/colorAccent"

否则,您可以尝试修改该类:

ImageView imageViewIcon = (ImageView) listItem.findViewById(R.id.imageViewIcon);
imageViewIcon.setColorFilter(getContext().getResources().getColor(R.color.blue));

更多信息在这个线程有可能改变材料设计图标颜色从xml在Android?来自xml的材料设计图标颜色

 类似资料:
  • 我有一个图标列表。我想把图标的颜色改为白色。默认情况下,我的图标是黑色的。伙计们有什么建议吗?

  • 我想将图标设置为,我从这个网站下载了图标:FlatIcon 现在我想设置此图标的颜色,但当使用时,只需为背景添加颜色,而不是设置为图标! 当使用时,我可以用此代码设置图标的颜色:。 如何将图标的颜色设置为,例如?谢谢大家

  • 我想有相同的svg(Transfer.svg)但不同的颜色只使用css,它必须兼容IE11,Edge,FF和Chrome。 提前谢谢你。

  • 嘿,我正在尝试做一个程序,它加载一个彩色图像作为灰度画布,然后返回颜色点击像素。当setrgb()方法没有做它应该做的事情时,我就被困在这里了。我已经通过getRGB()从原始图像中复制了颜色,并使用setRGB()将其分配给新图像。我试图输出两个像素颜色值,但他们不一样。请帮我解决这个问题。以下是到目前为止的代码:

  • 问题内容: 这是我想出的一小段代码的自我问答。 当前,没有一种简单的方法可以嵌入SVG图像,然后可以通过CSS访问SVG元素。有多种使用JS SVG框架的方法,但是如果您要做的只是制作带有过渡状态的简单图标,它们将过于复杂。 所以这就是我想出的,我认为这是迄今为止在网站上使用SVG文件的最简单方法。它的概念来自早期的文本到图像替换方法,但据我所知,从未对SVG进行过处理。 这是问题: 如何在不使用

  • 这是我想出的一段方便的代码的自我问答。 目前,还没有一种简单的方法来嵌入SVG图像,然后通过CSS访问SVG元素。使用JS SVG框架的方法多种多样,但如果您所做的只是制作一个带有滚动状态的简单图标,那么这些方法就过于复杂了。 所以这里是我想出的,我认为这是迄今为止在一个网站上使用SVG文件的最简单的方法。它的概念来自早期的文本到图像的替换方法,但据我所知,SVG从来没有这样做过。 这就是问题所在