在android中动态更改SVG图像颜色

问题描述 投票:13回答:3

我知道使用第三方库,可以在Android中使用SVG图像。库类似:svg-android

加载SVG图像的代码如下:

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Create a new ImageView
    ImageView imageView = new ImageView(this);
    // Set the background color to white
    imageView.setBackgroundColor(Color.WHITE);
    // Parse the SVG file from the resource
    SVG svg = SVGParser.getSVGFromResource(getResources(), R.raw.android);
    // Get a drawable from the parsed SVG and set it as the drawable for the ImageView
    imageView.setImageDrawable(svg.createPictureDrawable());
    // Set the ImageView as the content view for the Activity
    setContentView(imageView);
}

工作正常。我可以看到图像。但是现在我想在运行时更改svg图像的颜色。为此,我尝试了以下在同一项目描述中提到的代码。

  // 0xFF9FBF3B is the hex code for the existing Android green, 0xFF1756c9 is the new blue color
    SVG svg = SVGParser.getSVGFromResource(getResources(), R.raw.android, 0xFF9FBF3B, 0xFF1756c9);

但是,我看不到颜色的变化。因此,我想知道如何在Java文件中动态更改颜色。

android svg imageview android-view svg-filters
3个回答
29
投票
示例:

imageView.setColorFilter(getResources().getColor(android.R.color.black), PorterDuff.Mode.SRC_IN);


10
投票
0xFF9FBF3B,而是

#9FBF3B但是在Java代码期间,您必须使用ARGB值(例如0xFF9FBF3B)进行编写。我已经对其进行了更新,现在可以正常工作。我可以使用相同的代码更改svg文件的颜色。

希望这还将有助于其他人在运行时更改SVG图像的颜色时识别实际情况。

2
投票
Kotlin]中的Antlip Dev的答案。

package com.example.... // Your package. import android.graphics.PorterDuff import android.widget.ImageView import androidx.annotation.ColorRes import androidx.core.content.ContextCompat fun ImageView.setSvgColor(@ColorRes color: Int) = setColorFilter(ContextCompat.getColor(context, color), PorterDuff.Mode.SRC_IN)

用法:
view.your_image.setSvgColor(R.color.gray)
© www.soinside.com 2019 - 2024. All rights reserved.