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