可绘制的 setAlpha 在 android 4.4.2 上不起作用
Posted
技术标签:
【中文标题】可绘制的 setAlpha 在 android 4.4.2 上不起作用【英文标题】:Drawable setAlpha not working on android 4.4.2 【发布时间】:2014-12-21 04:32:36 【问题描述】:我正在使用以下函数来启用和禁用可绘制...
public static void setDrawableState(Drawable d, boolean enabled)
if (d == null)
return;
d.mutate(); // so drawables don't share state anymore
if (enabled)
d.setAlpha(255);
else
d.setAlpha(100);
这适用于我尝试过的所有手机,现在我发现它似乎不适用于 android 4.4.2(甚至可能不是特定于版本的)。
是否有另一种(更好的)方法来设置可绘制对象的 alpha?还是我错过了什么?
【问题讨论】:
它是否适用于旧版本? 是的,完美...在ImageButtons
、MenuItems
、ActionItems
...只要我将它应用到可绘制对象上,它就可以工作...不知道是不是适用于所有设备,但适用于我的设备(HTC One Mini、4.4.3 和 4.3)
我不认为您使用 mutate 正确。它返回可变实例。
你能解释一下,你将如何解决这个问题?实际上,我只是在谷歌上搜索了一下,甚至找到了一个解释我的技术的博客......curious-creature.org/2009/05/02/drawable-mutations
我不知道。我从来不需要这样做。我只是在视图上设置Alpha 或 setEnabled(false)
【参考方案1】:
因为drawables可能共享相同的状态,改变drawable状态不会有任何效果。您需要改变可绘制对象,例如在您的代码中,尝试类似:
d.mutate().setAlpha(100);
Android developer Blogs 有一篇很棒的博文,详细解释了可绘制状态和突变。
【讨论】:
实际上,这正是我所做的,并且在某些 android 版本上有效,但并非全部...在我的代码中,我什至评论了我调用mutate
的行并解释说,这样做的原因与您提到的完全相同...【参考方案2】:
如果你想确定的话:
Drawable d2 = d.getConstantState().newDrawable().mutate();
d2.setAlpha(100)
【讨论】:
以上是关于可绘制的 setAlpha 在 android 4.4.2 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章