Вы можете настроил ObjectAnimator
неправильно.
Предположим, что у вашего класса Point
есть переменная экземпляра xPosition
, которая является Integer. Для того, чтобы оживить xPosition
с ObjectAnimator
, вы могли бы сделать это:
ObjectAnimator.ofInt(new Point(), // Instance of your class
"xPosition", // Name of the property you want to animate
startValue, // The initial value of the property
... intermediateValues ..., // Any other desired values
endValue) // The final value of the property
.setDuration(duration) // Make sure to set a duration for the Animator
.start(); // Make sure to start the animation.
ObjectAnimator
будет пытаться автоматически обновить свойство после каждого кадра, но для того, чтобы быть успешным, ваш класс должен иметь надлежащий setter для свойства в формате setYourProperty
. Поэтому в этом конкретном примере ваш класс должен иметь метод под названием setXPosition
(обратите внимание на случай верблюда).
Если по какой-то причине это не работает, вы возвращаетесь на ValueAnimator
. Аналогичным образом вы настроили ValueAnimator
.
ValueAnimator anim = ValueAnimator.ofInt(startValue // Initial value of the property
endValue) // Final value of the property
.setDuration(duration); // Make sure to set a duration for the Animation.
Разница заключается в том, что вы должны вручную обновить свою собственность. Для этого добавим AnimatorUpdateListener
к анимации, метод onAnimationUpdate
будет вызываться после каждого кадра в анимации.
anim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
// Manually call the xPosition's setter method.
point.setXPosition(animation.getAnimatedValue());
}
});
И не забудьте начать анимацию.
anim.start();
Для получения более подробной информации о ValueAnimator
и ObjectAnimator
см Руководство по API от Google по анимации собственности: http://developer.android.com/guide/topics/graphics/prop-animation.html#value-animator
Хорошо, я получил это работает. Благодаря! Еще один вопрос: если я имею дело с собственными переменными, я обязан использовать ValueAnimator? Или я могу использовать какое-то свойство, чтобы избежать внедрения UpdateListener? –
Если вы используете ValueAnimator, вам очень нужно использовать UpdateListener, иначе у вас не будет способа реально связать значения, которые аниматор производит для вашей переменной. В большинстве случаев ObjectAnimator должен работать нормально, пока вы в порядке с предоставлением правильного метода настройки. Я не совсем уверен, что вы подразумеваете под собственными переменными, но переменная, объявленная локально, не может использоваться в ValueAnimator, поскольку вы можете ссылаться только на локальную переменную изнутри UpdateListener, если она объявлена окончательной, что тогда помешало бы вам фактически изменяя значение. –
По собственной переменной я имею в виду те, которые не определены пользователем, другими словами int, double, float и т. Д. Так как они не являются объектами, я не знаю, что установить в качестве параметра в ObjectAnimator. Так я должен использовать ValueAnimator для них? –