Анимация невидимых объектов в Android

После прочтения документации по PropertyAnimator кажется, что мы можем анимировать каждый объект, если выполняется одно из следующих условий:

  • Добавьте метод установки в класс, если у вас есть на это права.
  • Используйте класс-оболочку, на изменение которого у вас есть права, и пусть эта оболочка получает значение с допустимым методом установки и перенаправляет его исходному объекту.
  • Вместо этого используйте ValueAnimator.

Я пытаюсь анимировать в MenuItem Drawable или StateListDrawable в меню. Поскольку чертежи не содержат метод установки, мне было интересно, может ли кто-нибудь использовать ValueAnimator для анимации перевода, привести несколько примеров.


person jensiepoo    schedule 29.06.2016    source источник
comment
есть масса примеров. вот один из них: stackoverflow.com/questions/31130929/< /а>   -  person muratgu    schedule 29.06.2016


Ответы (1)


ValueAnimator animator = ValueAnimator.ofFloat(0, 1);
animator.setDuration(300);
animator.setInterpolator(new CycleInterpolator(3));
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator animation) {
        label.setTranslationX(((Float) animation.getAnimatedValue()) * 20);
    }
});
animator.start();

ValueAnimator очень прост и может использоваться для анимации чего угодно. Вам просто нужно обновлять значения, которые вам нужны, и аннулировать представления вручную в каждом кадре анимации. Приведенная выше анимация трижды встряхивает этикетку.

person Zielony    schedule 30.06.2016
comment
Спасибо! Это работает, когда нам разрешено обновлять значения и делать недействительными представления в объекте, который мы хотим анимировать. Что происходит, когда это встроенный MenuItem? Необходимо ли создавать класс-оболочку, который обертывает menuItem? - person jensiepoo; 30.06.2016
comment
Drawables имеют встроенный метод обновления своих родителей. Просто анимируйте это рисование и вызовите invalidateSelf(), когда это необходимо. - person Zielony; 01.07.2016