java – Set Alpha/Opacity of Layout-ThrowExceptions

Exception or error:

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.

How to solve:

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.


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

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.


Here is a method that works across all versions (thanks to @AlexOrlov):

public static void setAlpha(View view, float alpha)
    if (Build.VERSION.SDK_INT < 11)
        final AlphaAnimation animation = new AlphaAnimation(alpha, alpha);
    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).


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 🙂


Now you can use ViewCompat.setAlpha(View, float) for this action.


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

Leave a Reply

Your email address will not be published. Required fields are marked *