【问题标题】:DrawableCompat.setTint not reliable?DrawableCompat.setTint 不可靠?
【发布时间】:2020-11-18 22:08:00
【问题描述】:

我有两个ImageView(上、下),我想根据某些操作更新颜色。有三种不同的情况:

up red, down black

up black, down red

up green, down green

我有三个函数可以相应地更改在正确位置执行的颜色(我有一个 TextView 可以打印出当前调用的内容,结果符合预期),但我发现它们通常不起作用正确 - 因为它们只为一个 ImageView 着色。正如我在上面所写的,这是三种可能的情况——但是有时一个图像视图是绿色的,另一个是红色的,或者两个图像视图都是红色的,或者尽管在 up green, down green 情况下只有一个图像视图是绿色的——这不应该发生。以下是函数:

/** 17170452 = green
 * 17170444 = black
 * 17170455 = red
 */
    @SuppressLint("ResourceType")
    override fun colorTuned() {
        DrawableCompat.setTint(down.drawable, ContextCompat.getColor(applicationContext, 17170452))
        DrawableCompat.setTint(up.drawable, ContextCompat.getColor(applicationContext, 17170452))
    }
    @SuppressLint("ResourceType")
    override fun colorDown() {
        DrawableCompat.setTint(down.drawable, ContextCompat.getColor(applicationContext, 17170455))
        DrawableCompat.setTint(up.drawable, ContextCompat.getColor(applicationContext, 17170444))
    }

    @SuppressLint("ResourceType")
    override fun colorUp() {
        DrawableCompat.setTint(down.drawable, ContextCompat.getColor(applicationContext, 17170444))
        DrawableCompat.setTint(up.drawable, ContextCompat.getColor(applicationContext, 17170455))
    }

这些错误的情况怎么会发生在这里?

【问题讨论】:

  • 你在哪里打电话给DrawableCompat.wrap(drawable)?或者mutate()你的drawable?
  • 不,我发布的代码是唯一与更改颜色有关的代码
  • 谢谢,感谢 hardysim 的回答,终于让它工作了

标签: java android kotlin drawable


【解决方案1】:
val drawableUp = DrawableCompat.wrap(ContextCompat.getDrawable(this, R.drawable.ic_play_arrow)!!)
up.setImageDrawable(drawableUp)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
    DrawableCompat.setTint(drawableUp, ContextCompat.getColor(this, colorTop))

} else {
    drawableUp.mutate().colorFilter = BlendModeColorFilterCompat.createBlendModeColorFilterCompat(colorTop, BlendModeCompat.SRC_ATOP)
}

在我的情况下就是这样

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-03
    相关资源
    最近更新 更多