Reputation: 283
Is it possible to set and get the Alpha/Opacity of a Layout and all it's child views? I'm not talking about the background. Say a collection of Video Controls like Play, Pause and Progressbar in a Relative Layout.
I can use animation to fade in and out but wanted to know if there was a direct method I could use.
Upvotes: 20
Views: 18760
Reputation: 2345
Sorry for my answer but if you want the alpha you can use the ViewCompat Class
ViewCompat.setAlpha(View view, float alpha)
ViewCompat is in the appcompat v4
Upvotes: 0
Reputation: 2716
Here is a method that works across all versions (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);
}
Clearly, for API less than 11 if you can you should create a custom view that calls Canvas.saveLayerAlpha()
before drawing its children (thanks to @RomainGuy).
Upvotes: 15
Reputation: 18107
You can set the alpha on the layout and it's children (or any other view for that matter) using AlphaAnimation with 0 duration and setFillAfter option.
Example:
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);
You can use one animation for multiple components to save memory. And do reset() to use again, or clearAnimation() to drop alpha.
Though it looks crude and hacked it's actually a good way to set alpha on set ov views that doesn't take much memory or processor time.
Not sure about getting current alpha value though.
Upvotes: 60
Reputation: 98521
Alex's solution works but another way is to create a custom view that calls Canvas.saveLayerAlpha() before drawing its children. Note that in Android 3.0 there is a new View.setAlpha() API :)
Upvotes: 6