Объект Animator не работает в режиме экономии заряда батареи JellyBean(>Android 5.x)
Мое приложение интенсивно использует ObjectAnimator. Но недавно я заметил, что анимация с использованием ObjectAnimator не работает или иногда даже падает, когда включен режим энергосбережения. Поскольку плавность пользовательского интерфейса приложения в значительной степени зависит от анимации, я не могу пропустить ни одну из них. Пожалуйста, предоставьте обходной путь, чтобы использовать эти анимации даже в режиме экономии заряда батареи. Все ли аниматоры ставят эту проблему?? Заранее спасибо.
1 ответ
Фактически, Android отключает анимацию, когда включен режим экономии заряда батареи, что означает, что любая длительность, установленная для аниматора, изменится на 0. Аниматор получит последнее значение, которое будет применено к целевому виду, так как длительность была равна 0. Например:
View container = inflater.inflate(R.layout.container);
View view = inflater.inflate(R.layout.view, null);
container.addView(view);
ObjectAnimator animator = ObjectAnimator.ofFloat(view, "y", 0, 100);
animator.setDuration(200);
animator.start();
Положение вида будет установлено как (0, 100) по окончании анимации. В режиме энергосбережения продолжительность аниматора изменится на 0, и у представления еще не будет макета, когда аниматор установил свойство вида у, так что анимация кажется неудачной.
Разрешение:
View container = inflater.inflate(R.layout.container);
View view = inflater.inflate(R.layout.view, null);
new Handler().post(new Runnable() {
@Override
public void run() {
ObjectAnimator animator = ObjectAnimator.ofFloat(view, "y", 0, 100);
animator.setDuration(200);
animator.start();
}
});
Перед выполнением аниматора мы должны убедиться, что представление завершено.