设置布局的Alpha /不透明度

Tsu*_*ifu 19 java user-interface android

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

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

Ale*_*lov 60

您可以使用带有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);
Run Code Online (Sandbox Code Playgroud)

您可以将一个动画用于多个组件以节​​省内存.并重新使用reset(),或使用clearAnimation()来删除alpha.

虽然它看起来很粗糙并且被黑客攻击,但它实际上是一种在set ov视图上设置alpha的好方法,它不需要占用大量内存或处理器时间.

不确定是否获得当前的alpha值.


Tak*_*ion 15

这是一个适用于所有版本的方法(感谢@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);
}
Run Code Online (Sandbox Code Playgroud)

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


Rom*_*Guy 6

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