设置布局的 Alpha/不透明度
2022-09-02 04:57:51
是否可以设置和获取布局的 Alpha/不透明度及其所有子视图?我不是在谈论背景。在相对布局中说出视频控件的集合,如播放,暂停和进度条。
我可以使用动画淡入淡出,但想知道是否有我可以使用的直接方法。
是否可以设置和获取布局的 Alpha/不透明度及其所有子视图?我不是在谈论背景。在相对布局中说出视频控件的集合,如播放,暂停和进度条。
我可以使用动画淡入淡出,但想知道是否有我可以使用的直接方法。
您可以使用 AlphaAnimation(持续时间为 0)和 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() 以再次使用,或清除 Anmation() 以删除 alpha。
虽然它看起来粗糙且被黑客入侵,但它实际上是在设置ov视图上设置alpha的好方法,不会占用太多内存或处理器时间。
不确定是否要获得当前的阿尔法值。
这是一个适用于所有版本的方法(感谢@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,如果可以的话,您应该创建一个自定义视图,以便在绘制其子级之前调用(感谢@RomainGuy)。Canvas.saveLayerAlpha()