android 单击ImageView后更改图像

2w2cym1i  于 2023-01-03  发布在  Android
关注(0)|答案(2)|浏览(145)

每个人。单击ImageView后,我希望根据当前显示的可绘制对象的类型来更改它。为此,我将ImageView中当前设置的图像与可绘制对象文件夹中的图像进行比较。不幸的是,当前的情况是只执行else分支。第一次单击后图像会更改,但之后不再切换。我做错了什么?

bookmark_site.setOnClickListener{
        vibrator.vibrate(50);

        var draw = bookmark_site.drawable.constantState

        if(draw == ContextCompat.getDrawable(this,R.drawable.ic_baseline_bookmark_filled_24)?.constantState)
        {
            bookmark_site.setImageDrawable(resources.getDrawable(R.drawable.ic_outline_bookmark_border_outline_24))
        }
        else{

         //Only this two is ever executed
            bookmark_site.setImageDrawable(resources.getDrawable(R.drawable.ic_baseline_bookmark_filled_24))
        }
    }
yfjy0ee7

yfjy0ee71#

你不能基于constantState,不希望比较可绘制对象,因为每个可绘制对象都有不同的示例,因此你的if是不是true从来没有.事实上有没有办法为获取资源的drawable已经设置为ImageView .最方便的方法将是保持一些boolean标志外部onClick方法通知这图像是切换或不.可选地,您可以使用setTag(...)方法将此标志保留在ImageView“内部”

bookmark_site.setOnClickListener{
    vibrator.vibrate(50);

    val switched = bookmark_site.tag != null
    
    bookmark_site.setImageResource(
        if (switched) R.drawable.ic_outline_bookmark_border_outline_24
        else R.drawable.ic_baseline_bookmark_filled_24
    )
    
    bookmark_site.tag = if (switched) null else "SWITCHED"
}
rjee0c15

rjee0c152#

你应该在模型类中保留类别或标签沿着图像,然后根据标签或类别改变图像。

相关问题