Смена анимации android что это

Создание анимаций переходов между Activity в Android

Начиная с Android 4.4 в арсенале разработчиков появился дополнительный инструмент для создания анимаций — Transitions Framework. Изначально он предназначался для создания анимаций изменения состояния приложения путём манипулирования несколькими View. С выходом Android 5.0 набор доступных для использования анимаций был расширен, чтобы соответствовать представленной тогда же концепции Material Design.

Transitions Framework позволяет быстро и безболезненно создавать различные анимации. Поэтому в процессе работы над iFunny было невозможно пройти мимо этого инструментария. Вниманию читателей предлагается частный случай использования Transitions API — создание анимации перехода между Activity с эффектом «бесшовности».

С визуальной точки зрения представленные в Transitions Framework анимации переходов между Activity можно условно разделить на два типа: обычные анимации и анимации с общим элементом. Концепт анимации с общим элементом продемонстрирован на честно украденном с сайта developer.android.com рис. 1. На нём в роли общих элементов выступают аватар и имя контакта.

Рис. 1. Анимация перехода между Activity с общими элементами

Но никто не любит длинные вступления, поэтому сразу перейдём к рассказу о том, как создавались анимации данного типа в приложении iFunny. В качестве первого примера рассмотрим анимацию, показанную на рис. 2. Для её использования нам потребуется Android версии 5.0 и выше.

Рис. 2. Анимация перехода между Activity на экране аутентификации пользователя

С точки зрения пользователя, здесь нет ничего необычного: один экран, простенькая анимация. Но, как вы уже могли догадаться, «под капотом» — переход между двумя экранами с одним общим элементом.

Первым шагом к созданию подобного перехода является, как ни странно, выбор этого самого элемента и определение его местоположения в вёрстке обеих Activity. После этого в описание каждого View, отображающего выбранный элемент, нужно добавить атрибут android:transitionName, а также назначить им android:id, если таковой отсутствует.

В нашем случае это обычные ImageView следующего вида:

Здесь стоит отметить два важных момента. Во-первых, в обоих ImageView необходимо установить одинаковые transitionName, что логично. Во-вторых, коль скоро мы используем ImageView, то и содержимое у них должно быть одним и тем же, поскольку использование двух отличающихся ресурсов может привести к неожиданным последствиям (как минимум к морганию анимируемого View в начале и конце анимации).

На втором шаге необходимо добавить опции для запускаемой (второй) Activity, сообщающие о том, что при её запуске должна быть запущена анимация.

Примечание. Под «второй» подразумевается запускаемая Activity, переход к которой должен быть осуществлён, а под «первой» — запускающая Activity.

Делается это следующим образом:

В приведённом листинге:

  • R.id.auth_logo — ImageView из первой Activity, используемый в анимации;
  • activity — первая Activity;
  • R.string.email_auth_transition — метка, ранее оставленная в вёрстке обоих ImageView;
  • SecondActivity.class — вторая Activity.

И сейчас внимательный читатель может испытать недоумение: во вступлении речь шла об использовании API level 19, в примере фигурировал API level 21, а в листинге выше стоит ограничение на API level 22. К сожалению, при написании кода выяснилось, что анимации перехода с общим элементом могут вести себя некорректно на телефонах c API level 21. Проявляется это в виде подтормаживаний анимации в целом и артефактов на анимируемом View в частности. Если вы уже знакомы с темой, знаете причины подобного поведения и/или способы решения описанной проблемы — расскажите нам об этом в комментариях.

На третьем шаге необходимо описать анимацию перехода, т.е. указать путь, проходимый анимируемым View, и трансформацию самого View. Для этого создадим отдельный файл projectName/src/main/res/transitions/email_auth_transition.xml со следующим содержимым:

Немного теории. Тег transitionSet предназначен для описания сразу нескольких трансформаций, применяемых к анимируемому View. Параметр transitionOrdering отвечает за порядок применения этих трансформаций. В нашем случае они применяются одновременно. Существует несколько типов готовых трансформаций, представленных в Transitions Framework. С полным списком можно ознакомиться на этой странице. Мы же остановимся на двух конкретных: changeBounds и changeImageTransform.

Читайте также:  Как сменить оболочку андроид

Первая предназначена для трансформации размера View. Вторая работает только с ImageView и в связке с первой позволяет изменять не только размер, но и форму ImageView. Использовав данные трансформации, получаем на выходе анимацию изменения размера изображения, представленную на рис. 2. Если не указывать тип движения анимируемого View, то он будет двигаться по кратчайшему пути. Более интересный способ передвижения рассмотрим во втором примере.

Последним шагом создания анимации является её объявление в темах обеих Activity. Для этого отредактируем описание тем следующим образом (или создадим новые в папке projectName/src/main/res/values-v22/theme.xml):

  • android:windowActivityTransitions разрешает выполнение анимации перехода;
  • android:windowSharedElementEnterTransition указывает на файл с описанием анимации перехода от первой Activity ко второй;
  • android:windowSharedElementExitTransition указывает на файл с описанием анимации перехода при возвращении из второй Activity в первую.

Следует отметить, что для версий ОС ниже 5.1 необходимо создать темы с идентичными стилями, чтобы избежать вполне ожидаемых последствий в виде падения приложения. Например, поместим их в файл projectName/src/main/res/values/theme.xml:

Итак, для создания анимации перехода от Activity к Activity необходимо:

  1. Описать анимации (в нашем случае в xml-файле);
  2. Добавить эти анимации в xml-описание темы Activity;
  3. Пометить анимируемый общий элемент (View) в разметке;
  4. При запуске второй Activity указать в параметрах запуска, что для неё необходимо задействовать анимацию перехода.

Как видите, создавать такие анимации совсем не трудно, если не считать некоторых ограничений, упомянутых в первом примере. Теперь рассмотрим второй, более сложный пример. Тут нас интересует переход из раздела комментариев к профилю пользователя (рис. 3).

Рис. 3. Анимация перехода из комментариев к профилю пользователя

Все шаги по созданию перехода, рассмотренные выше, также подходят для этой анимации. А вот трансформация общего элемента реализована немного иначе. В приведённом ниже листинге описано перемещение общего элемента «по дуге» вместе с изменением его размера.

В чём же сложность второго примера? В первом случае использовалось изображение из ресурсов самого приложения, а тут — картинка загружается из сети. К тому же для комментариев изображение аватара пользователя берётся в более низком разрешении, чем для профиля. Поэтому требуется не только дать второй Activity доступ к изображению, используемому в первой, но и по завершении анимации подгрузить требуемое изображение в более высоком качестве. Так и получается две проблемы.

Для решения первой можно было бы собственноручно закэшировать изображение на диск или же передать его адрес в параметре второй Activity. Однако решение данной проблемы переложили на используемую в приложении библиотеку для загрузки изображений — Glide. При загрузке изображения достаточно просто добавить параметр diskCacheStrategy(DiskCacheStrategy.SOURCE), и оно будет закэшировано самой библиотекой (актуально для Glide версии 3.x). Следовательно, при повторном обращении к данному ресурсу из второй Activity будет использоваться кэшированный файл, что поможет нам избежать моргания анимируемого ImageView.

Вторая проблема также решается достаточно просто. В то время как осуществляется анимация перехода, профиль пользователя вместе с аватаром в более высоком разрешении скачиваются из сети и ожидают её завершения. Как только выполняются оба условия (завершение анимации и завершение загрузки), аватар пользователя обновляется. Добиться такого поведения можно, если использовать специальный Listener, в котором реализованы колбэки, вызываемые при смене статуса анимации. Для этого во Fragment, который принадлежит второй Activity, зададим этот самый Listener:

Здесь происходит следующее:

  1. С помощью getSharedElementEnterTransition().addListener() задаётся Listener для анимации появления Activity;
  2. В методе setAvatar() производится попытка загрузки и установки аватара (который уже лежит в кэше).

Рассмотрим, как именно реализован Listener:

В методе onProfileUpdated() мы обновляем содержимое профиля, в т.ч. и аватар.

Стоит отдельно упомянуть случай, когда общий элемент уходит за пределы экрана. Особенность его состоит в том, что, вопреки (а может, и согласно) логике, анимация перехода всё равно будет выполнена и будет смотреться достаточно забавно (рис. 4).

Рис. 4. Анимация возвращения из профиля в комментарии

Чтобы избежать подобного поведения, достаточно в момент ухода общего элемента за пределы экрана выставить ему видимость, отличную от View.VISIBLE.

Читайте также:  Running application on android device

В целом можно сказать, что Transitions Framework является простым и мощным инструментом для создания анимаций. Он не ограничивается только анимациями перехода между Activity — в статье был рассмотрен лишь частный случай его использования. Также стоит отметить, что помимо предоставляемых трансформаций имеется возможность создавать свои собственные, но это уже совсем другая история, достойная отдельного поста.

Источник

Анимации в 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. К сожалению, даже базовый пример займёт здесь довольно много места, поэтому ограничимся только этим кратким превью.

  • Высокая производительность и управление памятью, шейдеры

Недостатки:

Источник

Загрузочная анимация (Bootanimation) Андроид создание и замена

вкл. 17 Март 2015 . Опубликовано в Android — Общее

Загрузочная анимация (Bootanimation) Андроид создание и замена. Для тех кто любит всячески модифицировать Андроид или надоела стандартная загрузочная анимация Android и есть желание ее заменить, данный материал поможет осуществить вашу мечту!

Прежде всего!

Для того чтобы можно было производить замену загрузочной анимации Android (bootanimation), прежде всего необходимо иметь установленные root права на Android!

Загрузочная анимация Android что это такое?

Bootanimation (загрузочная анимация Android) — это загрузочная анимированная картинка (точней картинки), которая показывается во время загрузки Android.

Где находится Bootanimation и как выглядит?

Загрузочная анимация может находиться в трех различных разделах ОС Android, а именно:

  • /system/media
  • /data/local/media
  • /system/customize/resource

Bootanimation это чаще всего, не сжатый ZIP архив, который может иметь различные названия:

  • bootanimation.zip
  • spc_bootanimation.zip
  • VFAU_bootanimation.zip

Как правило в смартфонах и планшетах компании Samsung файл загрузочной анимации называется — bootsamsung.qmg и находиться в разделе /system/media.

Что находиться внутри Bootanimation?

Как выше было сказано bootanimation — это не сжатый ZIP архив, в котором содержаться папки с последовательно пронумерованными картинками, а также файл инициализации desc.txt, который служит для того чтобы объяснять системы порядок воспроизведения анимации.

архив bootanimation.zip с папками и файлом инициализации desc.txt

папка в которой последовательно пронумерованы картинки

Создание Bootanimation

Данный материал предназначен для всех марок смартфонов и планшетов Android, кроме Samsung (если установлена кастомная прошивка CyanogenMod, Aopk, Aosp, Omni Rom, то данное правило не распространяется). Для Samsung информация представлена ниже.

Читайте также:  Android gradle plugin как обновить

Правила создания Bootanimation

  • размер картинок должен соответствовать вашему размеру экрана
  • объем bootanimation не должен превышать 12 мб или иметь более 500 кадров
  • файлы картинок должны быть последовательно пронумерованы
  • формат картинок JPG (JPEG) или PNG
  • При создание архива он должен иметь 0% сжатия, без сжатия
  • Название архива должно соответствовать названию вашего bootanimation (то есть если файл имел название spc_bootanimation.zip, то и созданная анимация должна иметь соответствующее название, если bootanimation.zip то, переименовать на bootanimation.zip)

Для того чтобы создать правильную загрузочную анимацию Android прежде всего нужно иметь какой-то навык работы в графических редакторах.

Как правильно создать файл desc.txt

Прежде всего файл desc.txt необходимо создать, для этого создайте простой текстовый файл и переименуйте его на desc. Открываем и редактируем его:

Расшифровка и объяснение

480 480 — размер картинки

24 — скорость воcпроизведения

p 1 0 — один раз показать файлы из папки part0 без задержки

part0 — папка с картинками part0

p 0 0 — показывать файлы из папки part1 без задержки, пока не закончится загрузка

part1 — папка с картинками part1

В конце необходимо сделать переход на следующую строку, то есть нажать кнопку Enter

Автоматизация и упрощение создания файла DESC.TXT

Для новичков можно предложить программу Boot Animation Creator которая упростит создание правильного desc.txt и bootanimation.zip в целом.

Создайте проект (папку) в которой будут находиться папки с анимацией, в которых уже будет пронумерованные графические файлы. После того как скачали и установили программу, запустите ее и укажите проект.

Укажите разрешение экрана и скорость потока

Сохраните готовый проект загрузочной анимации Android

ВНИМАНИЕ!

В сети Internet можно найти схожую по названию программу Boot Animation Creator — bootanimationstudio.com. Ни в коем случае не скачивайте данную программу!

Данная программа содержит вирусы! Повторюсь Boot Animation Creator — bootanimationstudio.com содержит вирусы!

Создание Bootanimation для Samsung

1. Скачайте программу Samsung Theme Designer и установите ее

2. Скачайте понравившуюся загрузочную анимацию bootanimation.zip с интернета и распакуйте ее

3. Запустите программу Samsung Theme Designer

4. Выбрать создание проекта (не сенсор)

5. Выбрать любой телефон из списка. В поле Select Showcase выбрать «Default». В поле Name создать любое имя.

4. В новом открывшемся окне, активировать вкладку «The View Window» и выбрать пункт «Idle BackGround»

5. С правой стороны в поле «Background Type» сменить с fixed на animated

6. С распакованного архива анимации, в первой папке смотрим количество картинок

7. Открыть файл desc.txt и посмотреть скорость (частоту) кадров

8. В поле «Frame» ввести значения равному количеству картинок (п.6)

9. В поле «Duration» ввести скорость кадров (п.7)

10. В поле «Repeat» оставить значение False

11. Перетянуть картинки с первой папки на проект

12. Нажмите кнопку сохранить вверху и выполните экспорт темы

13. После создание анимации откроется папка или перейдите в папку с проектом и добавьте расширение ZIP файлу с расширением SMT

14. Откройте архив и извлечь файл IdleBgAnimObj.qmg и и переименовываем его наbootsamsung.qmg

15. Теперь необходимо добавить вторую папку для того чтобы анимация повторялась, возвращаемся к проекту удаляем все картинки и смотрим количество картинок во второй папке и прописываем, меняем в поле «Repeat» на значение True, сохраняем и создаем новую тему. Вынимаем с нового архива IdleBgAnimObj.qmg и и переименовываем его на bootsamsungloop.qmg

16. Полученную анимацию переместить в /system/media

Пример создания анимации

Как устанавливать загрузочную анимацию Андроид?

После того как создали bootanimation.zip (или создали анимацию для Samsung) или скачали, переместите его на карту памяти или внутреннюю память (если нет карты памяти). Установите приложение Root Browser

После чего переместить и заменить загрузочную анимацию Android по одному из пути (в зависимости от вашей модели) :

  • /system/media
  • /data/local/media
  • /system/customize/resource

Установка Bootanimation с помощью Adb Run (для HTC)

Если нет желание возиться с файловым менеджером, переброской загрузочной анимации на Android, после установкой, то стоит обратить свое внимание на приложение ADB RUN

Ознакомится с данной программой, узнать другие особенности а также скачать можно на данной странице — ADB RUN.

Источник

Оцените статью