ImageView删除色彩?

时间:2018-07-17 00:56:04

标签: android kotlin imageview tint

在我决定问之前,我搜索了一些Remove Tint Color Programmatically,但是它被标记为重复项,所以我不知道这是否也是重复项吗?我想是因为它没有回答我的问题。

因为我还要询问在更改ImageView之后是否可以重置删除色调drawable

这是正常图像

enter image description here

这是选定的图像

enter image description here

这是取消选择图片后的正常图片

enter image description here

这是我的代码。

if (isSelected) {
    // Reset the ImageView to normal
    isSelected = false
    imgHeart.setImageDrawable(itemView.context.getDrawable(R.drawable.baseline_favorite_border_24))
} else {
    // Tint ImageView to Red
    isSelected = true
    imgHeart.setImageDrawable(itemView.context.getDrawable(R.drawable.baseline_favorite_24))
    imgHeart.imageTintList = ColorStateList.valueOf(ContextCompat.getColor(itemView.context, R.color.colorRedHeart))
}

我也尝试使用imgHeart.imageTintList = null,但是图像变成白色或消失。 我也尝试了imgHeart.colorFilter = null,但是图像什么也不做,变成了最后一张图像。

我正在使用Material Design Icon

如您在第一张图片中所见,我想将图片恢复为正常的 drawable

谢谢。

1 个答案:

答案 0 :(得分:0)

选定的可绘制对象是与其他2完全不同的可绘制对象。您无法着色baseline_favorite_border_24使其看起来像选定的对象,只能着色边框并且不能用颜色填充它。顺便说一下,imageTintList需要API 21+
因此,请使用2个可绘制对象(无需下载它们,它们存在于Android Studio中),将选定的一个命名为baseline_favorite_filled_24,然后在它们之间切换。

if (isSelected) {
    isSelected = false
    imgHeart.setImageDrawable(itemView.context.getDrawable(R.drawable.baseline_favorite_border_24))
} else {
    isSelected = true
    imgHeart.setImageDrawable(itemView.context.getDrawable(R.drawable.baseline_favorite_filled_24))
}