5

I want to animate the alpha property of a ViewGroup's background Drawable.

I get a reference to the background's drawable using view.getBackground().

Then I use the following code (from this thread):

    if (backgroundDrawable.getAlpha() == 0) {
            ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(backgroundDrawable, PropertyValuesHolder.ofInt("alpha", 255));
            animator.setTarget(backgroundDrawable);
            animator.setDuration(2000);
            animator.start();
        } else {
            ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(backgroundDrawable, PropertyValuesHolder.ofInt("alpha", 0));
            animator.setTarget(backgroundDrawable);
            animator.setDuration(2000);
            animator.start();
        }

But the animation always starts from the alpha value 0. (meaning, when I want to animate to 0, it disappears immediately, because it animates from 0 to 0).

Does anyone know how I can make this work?

Community
  • 1
  • 1
dors
  • 5,802
  • 8
  • 45
  • 71

1 Answers1

6

I believe what u want is to set initial and final values for your animations, and not just the final value, like this:

if (backgroundDrawable.getAlpha() == 0) {
        ObjectAnimator animator = ObjectAnimator
            .ofPropertyValuesHolder(backgroundDrawable, 
                      PropertyValuesHolder.ofInt("alpha", 0, 255));
        animator.setTarget(backgroundDrawable);
        animator.setDuration(2000);
        animator.start();
    } else {
        ObjectAnimator animator = ObjectAnimator
             .ofPropertyValuesHolder(backgroundDrawable, 
                       PropertyValuesHolder.ofInt("alpha", 255, 0));
        animator.setTarget(backgroundDrawable);
        animator.setDuration(2000);
        animator.start();
    }

alternatively, starting from the current value using drawable.getAlpha(), but that method is only available starting on API 19 =/

Budius
  • 39,391
  • 16
  • 102
  • 144
  • 3
    Great answer but the line : animator.setTarget(backgroundDrawable); is redundant because the first argument in ofPropertyValuesHolder define already the target. – yshahak Jun 11 '15 at 16:03