可绘制的 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?还是我错过了什么?

【问题讨论】:

它是否适用于旧版本? 是的,完美...在ImageButtonsMenuItemsActionItems...只要我将它应用到可绘制对象上,它就可以工作...不知道是不是适用于所有设备,但适用于我的设备(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 上不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Android的PaintCanvas和Matrix讲解

Android 设置图片透明度

使用 Android 4.4.4 找不到可绘制资源

在相机预览中不工作 setAlpha

Android:在 4.2.2 及以下版本中具有内在边界的复合可绘制对象

Android Studio 4 不正确的矢量可绘制预览