- Как сделать более быструю анимацию переходов на Андроиде. Длительность анимации
- Настройки разработчика
- Анимирование одного и того же свойства двух объектов
- Анимации в Android по полочкам (Часть 2. Комплексные анимации)
- Часть 2. Комплексные анимации
- 1. Анимация изменений лэйаута (aka animateLayoutChanges)
- 2. Transitions framework
- Этот скрытый переключатель в Android может либо ускорить смартфон, либо сделать его плавнее
- Содержание
- Ускоряем смартфон: уменьшаем время анимации
- Делаем смартфон плавнее: увеличиваем время анимаций
Как сделать более быструю анимацию переходов на Андроиде. Длительность анимации
Настройки разработчика
Так как настройки скорости анимации и длительности недоступны через стандартные средства настроек, то будем менять длительность через настройки разработчика. Почему данные настройки были вынесены так далеко, нам не понятно.
Настройки для разработчиков — раздел на каждом телефоне Андроид, который предназначен не только для разработчиков. В данном разделе находятся множество полезных настроек, таких как Отображение нажатий на экран. О том, как получить доступ к настройкам разработчика мы написали несколько статей.
На устройствах Samsung и Huawei (Honor) инструкция может незначительно отличаться.
После того, как вы выключили настройки разработчика, осталось только сделать более быструю анимацию переходов и ее длительность
Анимирование одного и того же свойства двух объектов
Хорошей особенностью ValueAnimator является то, что вы можете повторно использовать его анимированное значение и примернять его к как можно большему количеству объектов.
Проверьте это, открыв FlyWithDogeAnimationActivity.java и добавив следующий код в onStartAnimation():
В приведённом выше коде вы просто создали три аниматора:
- positionAnimator — для изменения положения как mRocket, так и mDoge.
- rotationAnimator — для вращения Доге.
- animatorSet — для объединения двух аниматоров.
Обратите внимание, что вы устанавливаете перевод для двух объектов одновременно в первом аниматоре.
Соберите и запустите проект. Выберите «Не оставляйте Доге позади (Анимирование двух объектов)». Вы знаете, что делать. На Луну!
Анимация обычно подразумевает, что определённое действие произошло или произойдёт. Как правильно, что бы ни происходило, обычно приходит в конце вашей фантастической анимации.
Вы не можете наблюдать, но знаете, что ракета останавливается и остаётся на экране, когда анимация заканчивается. Если не планируете высаживать его или закрывать активность, вы можете удалить View, чтобы сэкономить ресурсы.
AnimatorListener получает уведомление от аниматора при следующих событиях:
- onAnimationStart() — при запуске анимации;
- onAnimationEnd() — при завершении анимации;
- onAnimationRepeat() — при повторении анимации;
- onAnimationCancel() — при отмене анимации.
Откройте WithListenerAnimationActivity.java и добавьте следующий код в onStartAnimation():
Структура вышеприведённого кода, за исключением части слушателя, должна выглядеть так же, как в предыдущем разделе. Вот что вы здесь делаете:
- Создаёте и настраиваете аниматор. Вы используете ValueAnimator для изменения положения двух объектов одновременно — вы не сможете сделать тоже самое с одним ObjectAnimator.
- Добавляете AnimatorListener.
- Показываете всплывающее сообщение при запуске анимации.
- И ещё одно сообщение, когда она заканчивается.
- Начинаете анимацию как обычно.
Соберите и запустите проект. Выберите «События анимации». Нажмите на экран. Следите за сообщениями!
Примечание: вы также можете добавить слушателя в ViewProperyAnimator, добавив setListener в цепочку вызовов до вызова start():
В качестве альтенатива вы можете устанавливать начальные и конечные действия, вызывая withStartAction(Runnable) и withEndAction(Runnable). Это эквивалент AnimatorListener с соответствующими действиями.
Анимирование — это не простые трюки, которые просто останавливаются и уходят. Они могут работать циклически, в обратном направлении, в течение определённой продолжительности и т.д.
В Android вы можете использовать следующие методы для настройки анимации:
- setRepeatCount — указывается количество повторений анимации после первого запуска;
- setRepeatMode — определяет, что должна делать анимация. когда она достигает конца;
- setDuration — указывает общую продолжительность анимации.
Откройте FlyThereAndBackAnimationActivity.java и добавьте следующий код в onStartAnimation():
- Создаёте аниматор как обычно.
- Можно установить для параметра repeatMode одно из следующих значений (RESTART — возобновляет анимацию с самого начала и REVERSE — обращает направление анимации с каждой итерацией). В данном случае вы устанавливает его на REVERSE. потому что вы хотите, чтобы ракета взлетела, а затем вернулась в туже позицию, где и началась. Как и SpaceX! 🙂
- …Кроме того, вы делаете это дважды.
- Устанавливаете продолжительность и запускаете анимацию как обычно.
Примечание: Итак, почему третий раздел указывает количество повторов 3 раза? Каждое движение вверх-вниз потребляет два повторения, поэтому вам нужно три, чтобы дважды довести Доге до земли: один для приземления в первый раз, а два — для запуска и посадки снова. Сколько раз вы хотели бы увидеть Доге? Поиграйте с этим!
Соберите и запустите проект. Выберите «Лететь туда и обратно (Опции анимации)» в списке. Нажмите на экран.
Вы должны увидеть, как ваша ракета прыгает, как кузнечик! Получи, Илон Маск! 🙂
У вас всё получилось в лучшей части этого урока. В этом заключительном разделе вы узнаете, как объявить анимацию один раз и использовать повсюду — да, это правда, вы сможете безнаказанного использовать свои анимации.
Определяя анимацию в XML, вы разрешаете повторное использование анимаций по всему коду.
Определение анимации в XML имеет некоторое сходство с составлением макетов разметки.
Если в src/main/res у вас нет папки animator, то нажмите на res правой кнопкой мыши и выберите New, затем Android resource directory.
В появившемся окне выберите тип ресурса animator.
Перейдите в папку res/animator и нажмите правой кнопкой мыши, выберите New, затем Android resource file.
Введите имя файла jump_and_blink. Сохраните предварительно выбранный корневой элемент в Source set.
В открывшемся редакторе вы увидите следующее:
Доступны следующие теги XML:
- set — то же, что и AnimatorSet;
- animator — то же, что и ValueAnimator;
- objectAnimator — вы правильно поняли, это ObjectAnimator.
При использовании AnimatorSet в XML вы вставляете объекты ValueAnimator и ObjectAnimator внутри него, подобно тому, как вы вставляете объекты View внутри объекта ViewGroup (RelativeLayout, LinearLayout и т.д.) в файлах разметки.
Замените содержимое jump_and_blink.xml следующим кодом:
Здесь вы объявляете корневой элемент, тэг set. Его атрибут упорядочения может быть либо «вместе», либо «последовательно». Он выставлен на «вместе» по умолчанию, но вы можете указать его для ясности. Тэг set имеет два дочерних XML-тэга, каждый из которых является объектным.
Взгляните на следующие атрибуты objectAnimator:
- android:valueFrom и android:valueTo — указывают начальные и конечные значения, когда вы создали ObjectAnimator;
- android:valueType — тип значения, либо floatType, либо intType;
- android:propertyName — свойство, которое вы хотите анимировать;
- android:duration — длительность анимации;
- android:repeatCount — тоже, что и setRepeatCount;
- android:repeatMode — то же, что и setRepeatMode;
- android:interpolator — указывает интерполятор. Он обычно начинается с @android:interpolator/. Начните вводить это, и Android Studio покажет все доступные интерполяторы по параметрам автозаполнения;
- Вы не можете указать свой целевой объект здесь, но вы можете сделать это позже в Java.
В последнем блоке вы добавили два экземпляра objectAnimator в AnimatorSet, и они будут воспроизводиться вместе. Теперь, пришло время их использовать.
Перейдите в XmlAnimationActivity.java и добавьте следующий код в onStartAnimation():
В приведённом выше коде вы делаете всего несколько вещей:
- Во-первых, вы загружаете AnimatorSet из файла R.animator.jump_and_blink, так же, как вы обычно загружаете разметку.
- Затем вы устанавливаете mRocket в качестве цели для только что загруженного аниматора.
- Ещё раз загружаете аниматор из того же файла
- Повторяете действия для mDoge.
- Теперь вы создаёте третий AnimatorSet и настраиваете его для одновременного воспроизведения первых двух.
- Устанавливаете продолжительность для корневого аниматора и запускаете.
- Уф! Осталось немного. 🙂
Соберите проект и запустите. Выберите «Прыгнуть и моргнуть (Анимация в XML) в списке. Нажмите на экран, чтобы увидеть результат своей работы.
Вы должны увидеть, как Доге прыгает, исчезает, а затем возвращается безопасно на землю. 🙂
Во время этого урока вы:
- Создали и использовали анимацию свойств с помощью ValueAnimator и ObjectAnimator;
- Настроили интерполятор времени для вашей анимации;
- Анимировали положение, поворот и цвет;
- Объединили анимации вместе;
- Использовали впечатляющий ViewPropertyAnimator с помощью animate();
- Повторили анимацию;
- Определили анимацию в XML для повторного использования в проекте.
В принципе, вы только что получили супер-способности анимирования в Android.
Если вы хотите узнать больше, ознакомьтесь с доступными временными интерполяторами в документации Android (смотрите Known Indirect Subclasses). Если вас не устраивает ни один из них, вы можете создать свой собственный. Вы также можете устанавливать для своей анимации ключевые кадры (Keyframes), чтобы сделать её сложнее.
У Android есть и другие виды анимации, такие как View animation и Drawable animation. Вы также можете использовать API Canvas и OpenGL для создания анимации. Будьте на связи. 🙂
Источник
Анимации в Android по полочкам (Часть 2. Комплексные анимации)
Приведённые в предыдущей части инструменты были относительно низкоуровневыми и в Android есть куда более простые способы добиться красивых анимаций не прибегая к прямому рисованию графики или изменению свойств объектов.
В этой части мы рассмотрим как можно минимумом усилий получить красивые анимации.
Часть 2. Комплексные анимации
1. Анимация изменений лэйаута (aka animateLayoutChanges)
Всё, что нам нужно сделать, чтобы добиться анимации как на гифке выше — это добавить флаг animateLayoutChanges в наш ViewGroup в xml. Теперь, когда мы удаляем или добавляем элемент в наш контейнер, либо изменяем его свойства, они автоматически будут анимированы.
Ладно, я немного слукавил когда говорил, что чтобы получить анимацию как на гифке выше, нужно всего лишь установить флаг. Добавление animateLayoutChanges на самом деле устанавливает LayoutTransition нашей ViewGroup. Но LayoutTransition по умолчанию анимирует только изменение видимости объектов в лэйауте. Поэтому если мы хотим изменять свойства объекта (например ширину и высоту) нужно включить эту опцию отдельно:
Теперь точно всё. Если захочется как-то кастомизировать это поведение, то у LayoutTransition есть метод setAnimator позволяющий задать свою собственную анимацию изменений. Ну самые хардкорные ребята всегда могут написать свой LayoutTransition .
• Применение:
Базовая анимация изменений объектов на сцене.
• Достоинства:
Минимальные трудозатраты
• Недостатки:
Слабая кастомизация
2. Transitions framework
Начиная с API 19 в Android появился новый фреймворк позволяющий создавать сложные анимации с участием большого количества элементов и минимумом кода.
Есть два основных варианта его использования:
1) Использование TransitionManager.beginDelayedTransition(ViewGroup)
Чтобы создать анимацию необходимо перед внесением изменений в наши View вызвать TransitionManager.beginDelayedTransition(ViewGroup) и передать в него ViewGroup, который мы хотим анимировать. Фрэймворк запомнит состояние View и запустит анимацию на следующем кадре.
2) Создание сцен
Создание анимации в этом случае сводится к созданию двух похожих xml, отвечающих за начальное и конечное состояние ваших анимаций. Соответственно, id объектов в xml должны совпадать, чтобы дать фреймворку возможность найти соответствие (На самом деле beginDelayedTransition тоже создаёт сцены, одну в момент вызова, а вторую на следующем кадре. После чего запускает анимацию между ними).
Кастомизация в Transitions framework достигается за счёт передачи объекта Transition вторым параметром. По умолчанию используется AutoTransition() , так что код ниже будет работать абсолютно так-же, как и код выше.
И если заглянуть внутрь AutoTransition можно заметить что анимации будут происходить в последовательно в следующем порядке:
— анимируются исчезающие объекты
— анимируются изменения размеров
— анимируются появляющиеся объекты
• Применение:
Анимация большого количества объектов
• Достоинства:
Минимальные трудозатраты
Доступная кастомизация
Источник
Этот скрытый переключатель в Android может либо ускорить смартфон, либо сделать его плавнее
Несмотря на то, что лучшие дешевые Android-смартфоны за последние несколько лет стали намного быстрее, они по-прежнему не достигли уровня флагманов, и даже самые дорогие устройства иногда могут показаться немного вялыми. Однако можно сделать смартфон более быстрым, уменьшив количество анимаций, либо сделать его плавнее, совершив обратное действие.
Каждое действие на вашем смартфоне вызывает различную анимацию. Они разработаны производителем как часть программного обеспечения. Независимо от того, кто делает ваш смартфон, вы можете сократить или увеличить время, которое занимает анимация.
Содержание
Ускоряем смартфон: уменьшаем время анимации
Чтобы иметь возможность ускорить анимацию на вашем устройстве, сначала нам нужно включить режим разработчика, после чего останется совершить всего несколько нажатий:
- Откройте настройки на вашем смартфоне.
- Прокрутите вниз и нажмите «О телефоне».
После внесения вышеуказанных изменений вы можете вернуться к обычному использованию смартфона и наслаждаться его увеличившейся скоростью.
Делаем смартфон плавнее: увеличиваем время анимаций
Чтобы сделать ваш смартфон более плавным, нужно совершить те же самые действия, но при этом выбрать значение, которое больше чем 1х. Я обычно ставлю 1.5х в параметрах «Анимация окна» и «Длительность анимации», чтобы такие элементы интерфейса, как клавиатура, выпадающие и всплывающие меню, отображались более медленно и плавно. Если выбрать слишком высокие значения, анимации могут стать чересчур медленными, так что экспериментируйте осторожно.
Вне зависимости от того, бюджетный у вас Xiaomi или сверхновый флагман Samsung Galaxy S21, анимации сделаны таким образом, что им требуется какое-то время для отображения. Поэтому их скорость не зависит от мощности процессора или объёма оперативной памяти, вместо этого её можно регулировать программно описанными выше способами.
Источник