在我决定问之前,我搜索了一些Remove Tint Color Programmatically,但是它被标记为重复项,所以我不知道这是否也是重复项吗?我想是因为它没有回答我的问题。
因为我还要询问在更改ImageView
之后是否可以重置或删除色调drawable
。
这是正常图像
这是选定的图像
这是取消选择图片后的正常图片
这是我的代码。
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
。
谢谢。
答案 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))
}