【问题标题】:Set Alpha/Opacity of Layout设置布局的 Alpha/Opacity
【发布时间】:2011-01-27 08:06:35
【问题描述】:

是否可以设置和获取布局的 Alpha/Opacity 及其所有子视图?我不是在谈论背景。在相对布局中说一组视频控件,例如播放、暂停和进度条。

我可以使用动画来淡入淡出,但想知道是否有可以直接使用的方法。

【问题讨论】:

    标签: java android user-interface


    【解决方案1】:

    您可以使用持续时间为 0 的 AlphaAnimation 和 setFillAfter 选项在布局及其子视图(或任何其他视图)上设置 alpha。

    例子:

    AlphaAnimation alpha = new AlphaAnimation(0.5F, 0.5F);
    alpha.setDuration(0); // Make animation instant
    alpha.setFillAfter(true); // Tell it to persist after the animation ends
    // And then on your layout
    yourLayout.startAnimation(alpha);
    

    您可以为多个组件使用一个动画以节省内存。并执行 reset() 以再次使用,或 clearAnimation() 删除 alpha。

    虽然它看起来很粗糙,但实际上是在不需要太多内存或处理器时间的 set ov 视图上设置 alpha 的好方法。

    不确定是否要获取当前的 alpha 值。

    【讨论】:

    • 谢谢。我正在使用动画,但是一旦动画完成,我将对象可见性设置为消失,而不是使用 setFillAfter 方法。
    • 它似乎破坏了动画(如果在动画期间运行)。有什么解决办法吗?
    • 作为一种解决方法,我使用半透明图像集作为View 的背景。
    【解决方案2】:

    这是一种适用于所有版本的方法 (thanks to @AlexOrlov):

    @SuppressLint("NewApi")
    public static void setAlpha(View view, float alpha)
    {
        if (Build.VERSION.SDK_INT < 11)
        {
            final AlphaAnimation animation = new AlphaAnimation(alpha, alpha);
            animation.setDuration(0);
            animation.setFillAfter(true);
            view.startAnimation(animation);
        }
        else view.setAlpha(alpha);
    }
    

    显然,对于小于 11 的 API,如果可以的话,您应该创建一个自定义视图,在绘制其子级 (thanks to @RomainGuy) 之前调用 Canvas.saveLayerAlpha()

    【讨论】:

    • 感谢 Takhion。添加@SuppressLint("NewApi") :)
    • 使用:ViewCompat.setAlpha(View, float)。
    【解决方案3】:

    Alex 的解决方案有效,但另一种方法是创建一个自定义视图,该视图在绘制其子项之前调用 Canvas.saveLayerAlpha()。请注意,在 Android 3.0 中有一个新的 View.setAlpha() API :)

    【讨论】:

    • 谢谢,期待setAlpha方法。我更习惯使用其他语言的东西。
    【解决方案4】:

    现在您可以使用ViewCompat.setAlpha(View, float) 执行此操作。

    【讨论】:

    • 引用自文档:“在 API 11 之前,这将无效。
    • 没有这种方法。我已将最小 api 设置为 11。但它有 ViewCompat.getAlpha(anyView) 方法
    【解决方案5】:

    很抱歉我的回答,但如果你想要 alpha,你可以使用 ViewCompat 类

    ViewCompat.setAlpha(View view, float alpha)

    ViewCompat 在 appcompat v4 中

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-08
      • 1970-01-01
      • 2012-07-04
      • 2014-01-26
      • 2013-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多