是否可以设置并获取布局的Alpha /不透明度及其所有子视图?我不是在谈论背景。在相对布局中说出一组视频控件,如播放,暂停和进度条。
我可以使用动画淡入淡出,但想知道是否有可以使用的直接方法。
答案 0 :(得分:59)
您可以使用带有0持续时间和setFillAfter选项的AlphaAnimation设置布局上的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值。
答案 1 :(得分:15)
这是一种适用于所有版本(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()
的自定义视图。
答案 2 :(得分:6)
Alex的解决方案有效,但另一种方法是创建一个自定义视图,在绘制其子项之前调用Canvas.saveLayerAlpha()。请注意,在Android 3.0中有一个新的View.setAlpha()API:)
答案 3 :(得分:3)
现在您可以使用ViewCompat.setAlpha(View, float)
执行此操作。
答案 4 :(得分:0)
很抱歉我的答案,但如果你想要alpha,你可以使用ViewCompat Class
ViewCompat.setAlpha(View view,float alpha)
ViewCompat位于appcompat v4
中