【发布时间】:2011-01-27 08:06:35
【问题描述】:
是否可以设置和获取布局的 Alpha/Opacity 及其所有子视图?我不是在谈论背景。在相对布局中说一组视频控件,例如播放、暂停和进度条。
我可以使用动画来淡入淡出,但想知道是否有可以直接使用的方法。
【问题讨论】:
标签: java android user-interface
是否可以设置和获取布局的 Alpha/Opacity 及其所有子视图?我不是在谈论背景。在相对布局中说一组视频控件,例如播放、暂停和进度条。
我可以使用动画来淡入淡出,但想知道是否有可以直接使用的方法。
【问题讨论】:
标签: java android user-interface
您可以使用持续时间为 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 值。
【讨论】:
View 的背景。
这是一种适用于所有版本的方法 (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()。
【讨论】:
Alex 的解决方案有效,但另一种方法是创建一个自定义视图,该视图在绘制其子项之前调用 Canvas.saveLayerAlpha()。请注意,在 Android 3.0 中有一个新的 View.setAlpha() API :)
【讨论】:
现在您可以使用ViewCompat.setAlpha(View, float) 执行此操作。
【讨论】:
很抱歉我的回答,但如果你想要 alpha,你可以使用 ViewCompat 类
ViewCompat.setAlpha(View view, float alpha)
ViewCompat 在 appcompat v4 中
【讨论】: