设置布局的Alpha /不透明度

时间:2011-01-27 08:06:35

标签: java android user-interface

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

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

5 个答案:

答案 0 :(得分:59)

您可以使用带有0持续时间和setFillAfter选项的AlphaAnimation设置布局上的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值。

答案 1 :(得分:15)

这是一种适用于所有版本(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()的自定义视图。

答案 2 :(得分:6)

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

答案 3 :(得分:3)

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

答案 4 :(得分:0)

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

ViewCompat.setAlpha(View view,float alpha)

ViewCompat位于appcompat v4