众所周知,矢量图可以作为一个drawable文件设置到ImageView里面,但是我常常会碰到同一个矢量图,路径的颜色却老是变化情况,一怒之下写出来这个控件~~
同一个矢量图的文件,设置颜色后:
1.在values下的attrs.xml文件中创建自定义的属性
<?xml version="1.0" encoding="utf-8"?>
<resources><declare-styleable name="vectorImageView"><attr name="vectorPathColor" format="color|reference" /></declare-styleable></resources>
2.创建自定义控件文件 VectorImageView.kt
import android.content.Context
import android.graphics.drawable.Drawable
import android.util.AttributeSet
import androidx.appcompat.widget.AppCompatImageView
import androidx.core.graphics.drawable.DrawableCompatclass VectorImageView @JvmOverloads constructor(context: Context,attrs: AttributeSet? = null,defStyleAttr: Int = 0
) : AppCompatImageView(context, attrs, defStyleAttr) {var iconColor: Int = 0set(value) {field = valueif (iconColor != 0) {applyIconColor(value)}}init {// 初始化时读取自定义属性attrs?.let {val typedArray = context.obtainStyledAttributes(it, R.styleable.vectorImageView)// 使用 getColor 获取颜色,默认值为 0iconColor = typedArray.getColor(R.styleable.vectorImageView_vectorPathColor, 0)typedArray.recycle()}}// 根据颜色值应用到 ImageView 的矢量图上private fun applyIconColor(color: Int) {val drawable: Drawable? = drawabledrawable?.let {val wrappedDrawable = DrawableCompat.wrap(it).mutate()DrawableCompat.setTint(wrappedDrawable, color)setImageDrawable(wrappedDrawable)}}
3.使用
<包名.VectorImageViewandroid:layout_width="@dimen/dp_60"android:layout_height="@dimen/dp_60"android:src="@drawable/left_arrow"app:vectorPathColor="@color/color_A0A5A6" /><!-- app:vectorPathColor="#FF921D"-->