有没有可能设置并获取布局及其所有子视图的Alpha/Opacity值?我不是在说背景。比如一个相对布局中包含了一组视频控件,如播放、暂停和进度条。
我可以使用动画来淡入淡出,但想知道是否有直接的方法可用。
有没有可能设置并获取布局及其所有子视图的Alpha/Opacity值?我不是在说背景。比如一个相对布局中包含了一组视频控件,如播放、暂停和进度条。
我可以使用动画来淡入淡出,但想知道是否有直接的方法可用。
您可以使用AlphaAnimation设置布局及其子视图(或任何其他视图)的alpha值,使用0持续时间和setFillAfter选项。
例如:
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。
尽管看起来很粗糙和不专业,但实际上这是一种在多个视图上设置alpha的好方法,它不会占用太多内存或处理器时间。
不确定如何获取当前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);
}
显然,对于API小于11的情况下,如果可以的话,你应该创建一个自定义视图,在绘制其子元素(感谢@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中
View
的背景。 - Sufian