Android Studio现在在21+上支持矢量资产,并将在编译时为低版本生成png。我有一个矢量资产(来自材质图标),我想改变填充颜色。这适用于21+,但生成的png不改变颜色。有办法做到这一点吗?
<vector android:height="48dp" android:viewportHeight="24.0"
android:viewportWidth="24.0" android:width="48dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@color/primary" android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/>
这是由Filipe绘制的Kotlin版本的Helper
class DrawableHelper(var mContext: Context) {
@ColorRes
private var mColor = 0
private lateinit var mDrawable: Drawable
private lateinit var mWrappedDrawable: Drawable
fun withDrawable(@DrawableRes drawableRes: Int): DrawableHelper {
mDrawable = getDrawable(mContext, drawableRes)!!
return this
}
fun withDrawable(drawable: Drawable): DrawableHelper {
mDrawable = drawable
return this
}
@SuppressLint("ResourceType")
fun withColor(@ColorRes colorRes: Int): DrawableHelper {
mColor = ContextCompat.getColor(mContext, colorRes)
return this
}
@SuppressLint("ResourceAsColor")
fun tint(): DrawableHelper {
mWrappedDrawable = DrawableCompat.wrap(mWrappedDrawable)
DrawableCompat.setTint(mWrappedDrawable, mColor)
DrawableCompat.setTintMode(mWrappedDrawable, PorterDuff.Mode.SRC_IN)
return this
}
fun applyToBackground(view: View) {
view.background = mWrappedDrawable
}
fun applyTo(imageView: ImageView) {
imageView.setImageDrawable(mWrappedDrawable)
}
fun applyTo(menuItem: MenuItem) {
menuItem.icon = mWrappedDrawable
}
fun get(): Drawable {
return mWrappedDrawable
}
companion object {
fun withContext(context: Context): DrawableHelper {
return DrawableHelper(context)
}
}
}