gpt4 book ai didi

Android Drawable mutate() 和 setLevel()

转载 作者:行者123 更新时间:2023-11-29 22:30:59 26 4
gpt4 key购买 nike

我正在尝试将可绘制对象存储在静态 SoftReferenceMap 中,用于每行包含进度条的 ListView。每行都有不同的进度,但是当我通过 setProgress(int) 设置它时,所有行都会受到影响。

我试过 mDrawable.mutate().setLevel(progress*10000/max),但还是不行。

public void setProgres(int status, int progress, int max) {

Drawable d = getDrawable(status);

switch (status) {
case RED_INDETERMINATE:
setIndeterminateDrawable(d);
setIndeterminate(true);
break;
case YELLOW:
d.mutate().setLevel((int) (progress * 10000 / max));
case GREEN:
case BLUE:
setProgressDrawable(d);
break;

default:
throw new IllegalArgumentException(
"Invalid Status setting for ArtooProgressBar: " + status);
}

getProgressDrawable().invalidateSelf();
super.invalidate();
}

private Drawable getDrawable(int status) {

SoftReference<Drawable> ref = sDrawableMaps.get("" + status);

if (ref != null && ref.get() != null)
return ref.get();

Drawable d;

switch (status) {
case RED_INDETERMINATE:
d = getResources().getDrawable(
R.drawable.progress_bar_indeterminate);
d = tileifyIndeterminate(d);
break;
case YELLOW:
// d = yellow;
d = getResources().getDrawable(
R.drawable.progress_bar_determinate_yellow);
break;
case GREEN:
d = getResources().getDrawable(
R.drawable.progress_bar_determinate_green);
d.setLevel(10000);
break;
case BLUE:
d = getResources().getDrawable(
R.drawable.progress_bar_determinate_blue);
d.setLevel(10000);
break;

default:
throw new IllegalArgumentException(
"Invalid Status setting for ArtooProgressBar: " + status);
}

if (d != null)
sDrawableMaps.put("" + status, new SoftReference<Drawable>(d));

d.invalidateSelf();
return d;

}

我错过了什么?

谢谢

最佳答案

看起来您正在跨多个 View 共享同一个 Drawable 实例。基本上,不要那样做。为什么要执行此 sDrawableMaps 缓存操作而不是为每个需要的 Drawable 调用 Resources.getDrawable()?这可能是问题的根源。

此外,您对 mutate() 的使用不会按照您的想法行事——如果 Drawable 还不是可变的,那么这将返回一个新的 Drawable 实例,您随后对其进行修改,但没有人真正看到它。如果它已经是可变的,它会返回相同的实例,但在那种情况下没有理由对其调用 mutate()。

关于Android Drawable mutate() 和 setLevel(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4058099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com