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.

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.

###

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).

###

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 *