首页 > 解决方案 > ImageView 删除色调颜色?

问题描述

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

因为我也在是否可以在更改.ImageViewdrawable

这是正常的图片

在此处输入图像描述

这是选择的图像

在此处输入图像描述

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

在此处输入图像描述

这是我的代码。

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正如您在第一张图片中看到的那样,我想让图像恢复正常。

谢谢你。

标签: androidkotlinimageviewtint

解决方案


选定的可绘制对象与其他 2 个完全不同的可绘制对象。您不能将其着色baseline_favorite_border_24为看起来像选定的可绘制对象,您只能对边框进行着色,而不能用颜色填充它。顺便imageTintList要求API 21+
所以使用2个drawables(你不需要下载它们,它们存在于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))
}

推荐阅读