- AnimationDrawable ()
- Пример с анимацией
- Создание анимации в коде программы
- Изменяем прозрачность
- Анимация при загрузке приложения
- Копирование кадров и показ в обратном порядке
- Анимация градиентного фона
- Как включить на Android опции для разработчиков и ускорить систему
- Включение опций для разработчиков
- Зачем это нужно?
- Заставьте все приложения работать в режиме мультиоконности
- Анимации в Android по полочкам (Часть 2. Комплексные анимации)
- Часть 2. Комплексные анимации
- 1. Анимация изменений лэйаута (aka animateLayoutChanges)
- 2. Transitions framework
- Анимации в Android по полочкам (Часть 3. «Низкоуровневые» анимации)
- Часть 3. «Низкоуровневые» анимации
- 1. Рисование на канвасе View
- 2. Рисование на канвасе SurfaceView
- 3. OpenGL
AnimationDrawable ()
Кадровая (фреймовая) анимация — традиционная анимация при помощи быстрой смены последовательных изображений, как на киноплёнке. Данный вид анимации использует XML-файлы в каталоге res/anim/.
- графический ресурс для кадра
- продолжительность кадра
Данная анимация будет выполняться только для трёх кадров. При установке атрибута android:oneshot в true анимация повторится только один раз и после остановки будет содержать последний кадр. Если же атрибут установить в false, то анимация будет циклической. Данный XML-файл, сохраненный в каталоге res/anim проекта, можно добавить как фоновое изображение для компонента и затем запустить анимацию.
Пример с анимацией
Создадим новый проект и добавим на форму две кнопки для управления анимацией.
Для анимации подготовим заранее отобранные файлы, которые необходимо поместить в каталог res/drawable. Наша анимация будет состоять из восьми кадров. Время показа каждого кадра установим в 250 миллисекунд. Запишем наши настройки в XML-файл catanimation.xml в каталоге res/drawable.
Получить объект AnimationDrawable в коде программы можно так:
Управлять объектом AnimationDrawable можно через методы start() и stop().
Запустите приложение и посмотрите на анимацию. Надеюсь, вид кота, делающего упражнения, заставит вас с понедельника начать делать зарядку.
Создание анимации в коде программы
Также можно создавать анимацию в коде — достаточно загрузить последовательно ресурсы кадров и определить время показа для каждого кадра. В качестве примера создадим новый проект, взяв за основу предыдущее упражнение.
В основном классе определим два внутренних метода startFrameAnimation() и stopFrameAnimation(), которые будем вызывать при нажатии кнопок «Пуск» и «Стоп».
В методе startFrameAnimation() реализуем создание анимации. Надо получить кадры анимации в виде набора объектов Drawable, загрузив изображения из ресурсов. Для каждого кадра создается отдельный объект Drawable:
Созданные объекты BitmapDrawable необходимо добавить в объект AnimationDrawable методом addFrame(), который принимает два параметра: кадр анимации (объект Drawable) и продолжительность показа в миллисекундах.
Полный листинг будет следующим:
В методах я также использовал проверку на работающую анимацию (isRunning()), хотя и без этой проверки всё работало. Но мало ли что.
Результат будет тот же самый (теоретически). У меня в эмуляторе почему-то работали только первые три кадра. На форумах многие пишут, что у них выводится только первый кадр. Отсюда можно сделать вывод, что не нужно использовать программную анимацию, а использовать анимацию через XML. Статья писалась в 2012 году, возможно сейчас на эмуляторе таких проблем нет.
Изменяем прозрачность
Класс AnimationDrawable имеет метод setAlpha(), позволяющий изменять прозрачность кадров от 255 до 0. Модифицируем предыдущий пример. Добавим на форму метку и ползунок:
В коде программы добавим слушатель изменения ползунка в методе onCreate():
Анимация при загрузке приложения
В документации по кадровой анимации имеется предупреждение, что при запуске программы анимация не запустится, так как не все необходимые классы подгружаются в момент старта приложения. В нашем примере мы использовали нажатия кнопок для запуска и остановки анимации, поэтому нам удалось избежать этой проблемы. А что же делать, если нам необходимо запустить анимацию сразу?
В этом случае придётся усложнить код. Добавим новый класс:
А в основном классе из первого примера добавим строчку кода:
Теперь при запуске приложения анимация автоматически начнет проигрываться.
Также можно попробовать вызвать метод onWindowFocusChanged().
Ниже есть пример, где код вынесен в onResume().
Копирование кадров и показ в обратном порядке
Мы можем получить отдельные кадры анимации и выстроить новую цепочку. Добавим на экран второй компонент ImageView и запустим в нём анимацию в обратном порядке, скопировав все кадры из первой анимации.
На всякий случай предупрежу, что во всех примерах мы использовали фон: setBackgroundResource(), getBackground() и т.д. Если вы будете использовать атрибут android:src, то соответственно используйте getDrawable() и другие родственные методы.
У AnimationDrawable нет слушателей, позволяющих отслеживать конец анимации. Как вариант, рассчитайте самостоятельно количество кадров и их продолжительность и реализуйте свой способ.
Данный вид анимации подходит для небольших изображений с ограниченным количеством кадров. Если изображения будут большими и кадров слишком много, то наступит переполнение памяти. Помните об этом.
Анимация градиентного фона
Создадим ресурсы для цветов в colors.xml.
В папке drawable создайте три файла с именами gradient_1.xml, gradient_2.xml и т.д. Содержимое будет одинаковым, только меняйте имена ресурсов и углы: 0, 255, 45.
В той же папке drawable создайте ещё один файл gradient_animation_list.xml
Присвойте корневому контейнеру идентификатор и созданный ресурс, у меня корневым макетом был FrameLayout.
Источник
Как включить на Android опции для разработчиков и ускорить систему
Один из лучших и самых популярных способов улучшить быстродействие вашего смартфона (как минимум, визуально) – это ускорить анимацию интерфейса. Это очень простой трюк, но для того чтобы его провернуть, вы должны включить «Опции разработчика». Опции разработчика – это что-то вроде тайной комнаты для Android-энтузиастов, которые позволяют делать по-настоящему крутые вещи. Там вы можете не только ускорить анимацию, но и заставить все приложения запускаться в многооконном режиме и многое другое. Если вы опытный пользователь Android, вам точно нужно знать эти приемы.
Включение опций для разработчиков
Опции для разработчиков стали доступны с Android 4.2 и с тех же пор они были спрятаны примерно в одном и том же месте. Хорошей новостью является то, что эти опции легко активировать, и они работают одинаково практически на каждом смартфоне или планшете под управлением Android. Следующие шаги должны работать на любом устройстве с версией «зеленого робота» KitKat или новее. Процесс может немного отличаться от устройства к устройству, но знайте, что вам просто нужно найти «Номер сборки».
- Зайдите в «Настройки» > «О телефоне/планшете»
- (У некоторых телефонов здесь есть дополнительный шаг. Нажмите «Информация о программном обеспечении»)
- Найдите пункт с номером сборки и тапните по нему несколько раз
- Прекратите тапать, когда появится надпись, что «теперь вы являетесь разработчиком»
- Вернитесь на главную страницу настроек
- Вы должны увидеть новый пункт «Параметры разработчика» в нижней части списка настроек или в расширенных настройках («Дополнительно»)
Для Android Oreo и выше:
- Зайдите в «Настройки» > «Система» > «О телефоне»
- Найдите номер сборки и тапните по нему несколько раз
- Прекратите тапать, когда появится надпись, что «теперь вы являетесь разработчиком»
- Вернитесь в «Настройки» > «Система»
- Теперь вы должны увидеть «Параметры разработчика»
Зачем это нужно?
Как мы упоминали выше, есть несколько хитрых трюков, которые можно сделать с помощью параметров разработчика. Хитрость, которую мы рекомендуем сделать в первую очередь, это ускорить анимацию и переходы. Это заставит ваш смартфон ощущаться быстрее, когда вы будете открывать приложения и перемещаться по интерфейсу. Каждый пользователь Android должен знать этот простой трюк.
Ускоряем смартфон
- Выполните действия, описанные выше, чтобы активировать параметры разработчика
- Перейдите в параметры разработчика
- Пролистайте вниз, найдите параметр «Анимация окон» и установите его значение на 5x
- Установите также «Анимацию переходов» на 5x
- Выберите «Длительность анимации» на 5x
Конечно, анимацию можно отключить полностью, но, на наш взгляд, лучше ее все же использовать, но просто ускорить. Как только вы все сделали, вернитесь на домашний экран и выключите дисплей с помощью кнопки питания. Теперь разбудите свой смартфон и наслаждайтесь более быстрым интерфейсом.
Заставьте все приложения работать в режиме мультиоконности
В Android 7.0 появился собственный многооконный режим, но не все приложения поддерживают его. На самом деле, его не поддерживают многие приложения, что делает его не очень полезным, но на этот случай есть способ принудительной совместимости с новой функцией, и все, что вам нужно сделать, это вернуться к параметрам разработчика.
- Выполните действия, описанные выше, чтобы включить параметры разработчика
- Перейдите в параметры разработчика
- Прокрутите вниз и активируйте параметр «Изменение размера в многооконном режиме»
- Перезагрузите телефон
Теперь вы сможете открывать любые приложения в многооконном режиме. Следует отметить, что некоторые приложения могут принудительно закрываться, когда вы переводите их в многооконный режим. В приложениях, которые его не поддерживают, будет указано «Это приложение может не работать в многооконном режиме», но большинство из них по-прежнему работают просто отлично.
Делитесь своим мнением в комментариях под этим материалом и в нашем Telegram-чате.
Источник
Анимации в 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 по полочкам (Часть 3. «Низкоуровневые» анимации)
Все методы рассмотренные в предыдущих частях хороши и удобны, однако если нам нужно анимировать большое количество объектов, они могут оказаться не подходящими. В данной части мы рассмотрим способы которые нам позволят работать с действительно большим количеством объектов и создавать программно сложные анимации.
Часть 3. «Низкоуровневые» анимации
1. Рисование на канвасе View
Первый способ который мы рассмотрим это рисование в методе onDraw нашего объекта View . Реализуется данный способ просто, достаточно переопределить onDraw и в конце вызвать postInvalidateOnAnimation() .
В данном примере наш drawable будет перемещаться по оси x.
Пример со снежинками выше будет занимать несколько больше кода, т.к. нам нужно хранить состояние каждой отдельной снежинки отдельно.
- Случаи в которых легче нарисовать анимацию программно
Достоинства:
- Можно создавать анимации зависящие абсолютно от любых параметров
- Нет лишних затрат на объекты View
Недостатки:
- Расчёты анимации и отрисовка происходят в UI thread
2. Рисование на канвасе SurfaceView
Что если расчёт следующего шага анимации будет занимать значительное время? Мы всё ещё можем воспользоваться первым способом и вынести расчёты в отдельный поток. Но это всё равно не приведёт к 100% плавности в анимации т.к. UI thread может быть загружен ещё чем либо помимо нашей анимации.
Android позволяет отвязаться от основного цикла(main loop) отрисовки с помощью компонента SurfaceView . А раз мы больше не привязаны к основному циклу, то нам придётся держать свой поток для расчётов и отрисовки. SurfaceView предоставляет коллбэки в которых мы можем запустить и остановить наш поток. В потоке по окончанию расчётов мы будем отрисовывать нашу анимацию.
Реализация той же анимации снежинок будет выглядеть следующим образом:
- Случаи в которых легче нарисовать анимацию программно
- Игры
Достоинства:
- Можно создавать анимации зависящие абсолютно от любых параметров
- Нет лишних затрат на объекты View
Недостатки:
3. OpenGL
Точно также, как и на канвасе, мы можем рисовать используя OpenGL API. Если вы задумали что-либо сложнее чем куб на картинке, то стоит посмотреть в сторону какого-либо движка, например libgdx. К сожалению, даже базовый пример займёт здесь довольно много места, поэтому ограничимся только этим кратким превью.
- Высокая производительность и управление памятью, шейдеры
Недостатки:
Источник