- Метод overridePendingTransition() — анимации между активностями
- Анимация при старте активности
- Метод overridePendingTransition()
- res/anim/left_out.xml
- res/anim/right_in.xml
- res/anim/top_out.xml
- res/anim/bottom_in.xml
- Анимация при помощи XML
- activity_down_up_enter.xml
- activity_down_up_exit.xml
- activity_down_up_close_enter.xml
- activity_down_up_close_exit.xml
- res/values/styles.xml
- res/values/themes.xml
- Анимация переходов между двумя фрагментами
- Поддержка предыдущих версий Android?
- Имена переходов
- Настройка FragmentTransaction
- Настройка анимации перехода
- Классы анимации перехода
- Все вместе
- Кастомизация переходных анимаций между Activity в ОС Android
- Анимация старой Activity
- Анимация новой Activity
- Заключение
- Русские Блоги
- Android Transition (анимация перехода Android)
- Один, Сцена Переход
- 1.1, TransitionManager.go () анимация открытой сцены
- 1.2, beginDelayedTransition () открывает анимацию сцены
- два, Анимация перехода активности
- 2.1, Анимация перехода активности перед API 21
- 2.2 Использование анимации перехода активности после API 21
- три, Переход общего элемента
- 3.1, основные понятия общих элементов
- 3.1, обновить соответствие между общими элементами
- 3.1 Задержка анимации общего элемента
Метод overridePendingTransition() — анимации между активностями
Анимация при старте активности
Прежде чем обсуждать, как создавать анимацию между активностями, рассмотрим пример создания анимации для самой первой активности, которая загружается при запуске приложения.
Создадим файл анимации rotate.xml в папке res/anim/:
Добавим в активность два ImageView:
Нам нужно запустить анимацию в методе onCreate() или в onResume():
Метод overridePendingTransition()
Если вы хотите задать собственную анимацию при переключении между активностями, то можете сделать это несколькими способами.
У класса Activity есть метод overridePendingTransition() и он должен идти сразу после вызова метода startActivity() или finish(). Метод принимает два параметра: ресурс анимации для запускающей активности и ресурс анимации для уходящей активности.
Таким образом вам нужно создать в папке res/anim два файла анимации и передать их идентификаторы в метод.
Предположим, первый файл будет diagonaltranslate.xml:
Второй файл — alpha.xml:
В одном из старых проектов я нашёл метод startActivity() и применил этот способ:
Запускаем проект и переходим на другую активность. Новая активность будет расти из нижнего правого угла по диагонали, а текущая активность будет становиться прозрачной. Тут всё зависит от вашей фантазии, придумайте собственные сценарии анимации. Для примера я использовал достаточно большие значения duration, на самом деле не стоит увлекаться и старайтесь указывать короткие интервалы.
Ещё пример анимации, когда экран сдвигается влево, а при возвращении обратно — вверх. Привожу только файлы анимации.
res/anim/left_out.xml
res/anim/right_in.xml
res/anim/top_out.xml
res/anim/bottom_in.xml
Анимация при помощи XML
Кстати, есть способ использовать анимацию без единой строчки Java-кода, только XML.
Создайте в папке res/anim четыре файла:
activity_down_up_enter.xml
activity_down_up_exit.xml
activity_down_up_close_enter.xml
activity_down_up_close_exit.xml
Теперь пропишем стили на основе наших файлов.
res/values/styles.xml
Создадим файл для темы.
res/values/themes.xml
Остался последний шаг. Пропишем темы в манифесте для двух активностей, между которыми будем переключаться.
Создайте в коде переход на второй экран и запустите проект. При нажатии на кнопку, которая запускает вторую активность, вы увидите, что второй экран приложеиня появляется с анимацией движения снизу вверх с пристукиванием. При переходе обратно на первый экран, вторая активность будет уменьшаться в размерах, сворачиваясь по центру.
Рекомендую вживую посмотреть на эффекты, вам понравится.
Источник
Анимация переходов между двумя фрагментами
Одним из краеугольных камней в Material design являются осмысленные движения между экранами. Lollipop предоставляет поддержку этих анимаций в форме фреймворка переходов между Activity и Fragment. Поскольку статей по данной теме не так много, я решил написать свою собственную!
Наш конечный продукт будет достаточно прост. Мы будем делать приложение-галерею с котиками. При нажатии на изображение будет открываться экран с подробностями. Благодаря фреймворку переход из сетки изображений в окно с подробностями будет сопровождаться анимацией.
Если вы желаете увидеть, что получилось — готовое приложение находится на GitHub.
Поддержка предыдущих версий Android?
У меня есть для вас две новости: хорошая и плохая. Плохая новость заключается в том, что до Lollipop данный фреймворк не работает. Не смотря на это, проблема решается методами библиотеки поддержки с помощью которой вы можете реализовать анимированые переходы доступные в API 21+.
В статье будут использоваться функции из библиотеки поддержки для обеспечения перемещения контента.
Имена переходов
Для ассоциации View на первом экране и его двойника на втором нужна связь. Lollipop предлагает использовать свойство “transition name” для связи View между собой.
Существует два способа добавления имени перехода (transition name) для ваших View:
- В коде можно использовать ViewCompat.setTransitionName() . Конечно, вы так же можете просто вызвать setTransitionName() , если поддержка начинается с Lollipop.
- Для добавления в XML, используйте атрибут android:transitionName .
Важно отметить, что внутри одного макета (layout), имена переходов должны быть уникальны. Держите это в уме при организации переходов. Указывая transition name для ListView или RecyclerView задаст это же имя и для всех остальных элементов.
Настройка FragmentTransaction
Настройка FragmentTransactions должна быть вам очень знакомой:
Чтобы указать какую View будем передавать между фрагментами — используем метод addSharedElement() .
Переданная View в addSharedElement() это View из первого фрагмента, которую вы хотите разделить (share) со вторым фрагментом. Имя перехода тут является именем перехода в разделенной (shared) View во втором фрагменте.
Настройка анимации перехода
Наконец-то пришел момент, когда мы зададим анимацию перехода между фрагментами.
Для shared элементов:
- Для перехода с первого фрагмента во второй используем метод setSharedElementEnterTransition() .
- Для возврата назад используем метод setSharedElementReturnTransition() . Анимация произойдет при нажатии кнопки назад.
Заметьте, что вам необходимо вызвать эти методы во втором фрагменте, поскольку, если вы сделаете это в первом — ничего не произойдет.
Вы так же можете анимировать переходы для всех non-shared View. Для этих View, используйте setEnterTransition() , setExitTransition() , setReturnTransition() , и setReenterTransition() в соответствующих фрагментах.
Каждый из этих методов принимает один параметр Transition предназначенный для выполнения анимации.
Создавать анимацию мы будем очень просто. Мы используем наш кастомный transition для передвижения изображения (об этом чуть позже), и исчезание ( Fade ) при выходе.
Классы анимации перехода
Android предоставляет некоторые готовые анимации переходов, что подходят для большинства случаев. Fade выполняет анимацию исчезновения. Slide анимирует переход появления/исчезновения скольжением из угла экрана. Explode анимация подобная взрыву, изображение движется от краев экрана. И наконец, AutoTransition заставит изображение исчезать, двигаться и изменять размер. Это лишь некоторые примеры из пакета перемещений, их на самом деле намного больше!
Я упоминал, что нам понадобится кастомный переход для нашего изображения. Вот он:
Наш кастомный переход есть ни что иное как набор из трех готовых переходов собранных вместе:
- ChangeBounds
анимирует границы (положение и размер) нашей view. - ChangeTransform
анимирует масштаб view, включая родителя. - ChangeImageTransform
позволяет нам изменять размер (и/или тип масштаба) нашего изображения
Если вам интересно узнать, как они втроем взаимодействуют попробуйте поиграть с приложением, поочередно убирая то одну то другую анимации, наблюдая за тем как все ломается.
Вы так же можете создать более сложные анимации используя XML. Если вы предпочитаете XML, то вам будет интересно посмотреть документацию на сайте андроида Transition
.
Все вместе
Код который в итоге у нас получился оказался достаточно простым:
Вот и все! Простой способ реализации анимации переходов между двумя фрагментами готов!
Источник
Кастомизация переходных анимаций между Activity в ОС Android
Добрый день! В этой статье мы будем рассматривать процесс создания кастомных анимаций переходов между Activity в Android при помощи ObjectAnimator и AnimatorSet. Всем, кому это интересно — добро пожаловать под кат.
PS: статья написана в основном для начинающих разработчиков.
Весь исходный код доступен на GitHub
Мы рассмотрим 2 вида переходных анимаций:
- анимируем старую Activity на фоне новой
- анимируем новую Activity на фоне старой
Для демонстрации были выбраны 2 типа анимации: одновременная анимация нескольких объектов (створки двери) и последовательная анимация нескольких объектов (сворачивание листа бумаги)
Анимация старой Activity
Итак, создадим 3 Activity: FirstActivity, SecondActivity и ThirdActivity.
Функция getBitmap возвращает Bitmap текущего окна. При клике по основному элементу Activity создаем новый Intent, и в качестве Extra задаем наш Bitmap, преобразованный в байтовый массив. После чего запускаем SecondActivity.
В качестве главного элемента нашей Activity мы задаем FrameLayout, который содержит в себе 2 LinearLayout. В первом размещается весь необходимый контент(в нашем случае это TextView). Во втором находятся 2 ImageView, которые делят экран пополам. Онb необходимы нам для анимации.
Для анимации нам необходимо предпринять следующие шаги:
- Создать Bitmap из байтового массива, переданного из первыой Activity
- Разделить Bitmap на 2 части и загрузить их в соответствующий ImageView
- При помощи AnimatorSet одновременно воспроизвести анимацию поворота обоих ImageView
В функции onCreate мы получаем Bitmap из Extras, делим его на 2 Bitmap при помощи Bitmap.createBitmap() и устанавливаем полученные изображения в ImageView. После этого регистрируем Observer, который будет следить за onDraw событием ImageView и вызываться только один раз перед первой отрисовкой объекта. В нем мы запускаем анимацию открытия Activity.
Непосредственно сама анимация описана в функции startEnterAnimation(). При помощи функций setPivotX() и setPivotY() мы устанавливаем точки, вокруг которых будут вращаться наши изображения. Далее мы задаем сами анимации вращения при помощи объекта ObjectAnimator.
ObjectAnimator — компонент системы, появившийся с Android 3.0. Он помогает анимировать какое-либо свойство любого объекта. В данном случае, мы анимируем свойство rotationX типа float объекта left.
Далее, мы создаем набор анимаций AnimatorSet, задаем длительность анимации в 500 мс и говорим ему, что будем одновременно проигрывать 2 анимации.
Анимация закрытия Activity задается аналогично. Для ее запуска мы переопределяем функцию Activity onBackPressed(). В ней мы запускаем анимацию закрытия, не забыв добавить listener с функцией finish().
Анимация новой Activity
Для того, чтобы анимировать новую Activity на фоне старой, нам не нужно ничего передавать в новую Activity. Нужно просто сделать фон ACtivity прозрачным. Для этого мы изменяем в файле AndroidManifest тему ThirdActivity на Transparent, и добавляем эту тему в styles.xml
Сам процесс анимации будет заключаться в следующем:
- при помощи наблюдателя OnPreDrawListener и функции getBitmap мы получаем Bitmap нашего Layout, после чего делаем его невидимым и запускаем анимацию открытия Activity
- делим полученный Bitmap на 4 части, устанавливаем каждую часть в соответствующий Bitmap, после чего делаем невидимыми все изображения кроме начального
- анимация открытия будет похожа на предыдущую, за исключением того, что после окончания анимации каждого куска изображения нам необходимо сделать видимым следующий кусок изображения
- ну и в конце всей анимации мы делаем видимым Layout с контентов этой Activity, а изображения скрываем
Вся анимация запускается при помощи все того-же AnimatorSet, только задаются они при помощи функции playSequentially. Это означает, что все анимации будут запускаться последовательно друг за другом.
Анимация закрытия Activity делается аналогично, только в обратном порядке.
Заключение
Мы рассмотрели 2 способа создания переходной анимации между Activity. Весь код в статье адаптирован под версию системы выше 3.0, однако его легко можно адаптировать и под более ранние версии, начиная с 1.6, при помощи библиотеки NineOldAndroids от всем известного Jake Wharton’а. Единственное, о чем хотелось бы заострить внимание — это на установке относительных точек для поворота и увеличения. В этой библиотеке они устанавливаются при помощи объекта AnimatorProxy.
На этом все, если понравится эта статья — продолжу публикации на тему создания анимаций в ОС Android.
Источник
Русские Блоги
Android Transition (анимация перехода Android)
На андроид 4.4Transition Это было введено, но после Android 5.0 (API 21), Переход более применим. По сравнению с View Animation или Property Animator анимация Transition является более особенной, и Transition можно рассматривать как сильно инкапсулированный Property Animator. В отличие от Animator, анимация перехода имеет визуальную непрерывность переключения сцен.
Чтобы иметь общее представление о переходном периоде, мы прошли: Scene Transition (анимация перехода сцены),ActivityАнимация перехода, Shared Element Transition (анимация перехода совместно используемого элемента) три аспекта, чтобы сделать простое понимание 。
Один, Сцена Переход
Анимация перехода сцены относится к реализации переключения между двумя сценами просмотра (из одной сцены в другую сцену) в форме анимации. И в процессе переключения через переходы устанавливаются разные эффекты анимации перехода.
В анимации перехода сцены есть два специальных ключевых понятия: Сцена, Переход 。
- Сцена: Сцена представляет собой сцену. Scene сохраняет иерархию представлений, включая все ее представления и состояние представлений, обычно получает экземпляр Scene с помощью getSceneForLayout (ViewGroup sceneRoot, int layoutId, Context context). Каркас перехода может реализовать анимацию между начальной и конечной сценой. И в большинстве случаев нам не нужно создавать начальную сцену, потому что начальная сцена обычно определяется текущим состоянием пользовательского интерфейса, нам нужно только создать конечную сцену.
- Переход: Transiton используется для установки эффекта анимации перехода. И система предоставляет некоторые очень полезные эффекты анимации Transtion, как показано в следующей таблице:
Системный переход | объяснение |
---|---|
ChangeBounds | Определите положение и границу вида, чтобы создать анимацию перемещения и масштабирования (фокус на изменениях границы макета) |
ChangeTransform | Определение масштаба и поворота вида для создания анимации масштабирования и поворота (фокусировка на изменениях масштаба и поворота) |
ChangeClipBounds | Определить границу положения области отсечения вида, аналогично ChangeBounds. Однако ChangeBounds предназначен для представления, а ChangeClipBounds — для прямоугольника в области выреза представления setClipBound (Rect rect) (фокусируется на изменении setClipBounds (Rect rect) rect) |
ChangeImageTransform | Определите ScaleType для ImageView и создайте соответствующую анимацию (обратите внимание на scaleType ImageView) |
Fade | Создайте анимацию затухания на основе состояния видимости представления и отрегулируйте прозрачность (фокусируясь на состоянии видимости представления) |
Slide | Создайте скользящую анимацию на основе состояния видимости вида (сфокусируйтесь на состоянии видимости вида) |
Explode | Создайте анимацию декомпозиции на основе состояния видимости вида (сфокусируйтесь на состоянии видимости вида) |
AutoTransition | Анимация по умолчанию, коллекция анимаций ChangeBounds и Fade |
Для достижения анимации перехода сцены требуется по меньшей мере один экземпляр перехода и один экземпляр конечной сцены. И выполнить анимацию перехода через TransitionManager. TransitionManager может выполнять анимацию двумя способами: TransitionManager.go()、beginDelayedTransition() , Ниже приведено краткое введение в эти два способа запуска анимации сцены.
1.1, TransitionManager.go () анимация открытой сцены
Прежде чем использовать TransitionManager.go () для анимации сцены, сначала включите визуализацию
TransitionManager.go () требует два параметра: первый параметр представляет сцену, на которую нужно перейти (конечная сцена), а второй параметр — анимация перехода (экземпляр перехода).
Когда TransitionManager.go () запускает анимацию, сцена обычно задается файлом макета. Экземпляр сцены получен с помощью Scene.getSceneForLayout () и требует трех параметров: первый параметр представляет группу ViewGroup, в которой расположена сцена, второй параметр представляет файл макета сцены и макет третьего параметраКонвертация файловСодержание, необходимое для просмотра.
Сцена TransitionManager.go () определяется файлом макета.
1.2, beginDelayedTransition () открывает анимацию сцены
Использование beginDelayedTransition () для достижения эффекта анимации сцены
Анимация сцены также может быть включена через TransitionManager.beginDelayedTransition (). После выполнения TransitionManager.beginDelayedTransition () система сохранит сцену текущего состояния дерева представления, а затем после того, как мы изменим свойства представления (например, сброс положения представления, масштабирование, ограничение и т. Д.). На следующем чертеже система автоматически сравнивает ранее сохраненное дерево видов и затем выполняет соответствующую анимацию.
два, Анимация перехода активности
2.1, Анимация перехода активности перед API 21
Анимация перехода активности до API 21 реализована двумя способами: унифицированная настройка в теме стиля или использование функции overridePendingTransition кода для установки отдельно. (Конечно, приоритет настройки кода выше, чем унифицированная настройка в теме стиля)
- Тема файла стиля определяется единообразно, а эффект анимации перехода устанавливается глобально для всех операций.
- Код overridePendingTransition (enterAnim, exitAnim) устанавливается отдельно
Использование функции overridePendingTransition () позволяет понять, чью анимацию представляют два параметра. Предположим, что есть такой экземпляр, что A запускает B, тогда первый параметр — это анимация, когда B входит, а второй параметр — это анимация, когда A выходит.
Что касается функции overridePendingTransition, следует отметить, что она должна вызываться рядом с функцией startActivity () или finish () или onBackPressed (), иначе она может не иметь эффекта.
2.2 Использование анимации перехода активности после API 21
Таблица эффектов анимации перехода активности
Но теперь вы снова можете получить новый навык. После API 21 Google запустил анимацию перехода, которая даже лучше, чем раньше. Через ActivityOptions + Transition для достижения анимации перехода Activity.
Прежде чем говорить об использовании ActivityOptions + Transition для реализации анимации перехода Activity, давайте посмотрим, что означают несколько функций в ActivityOptions.
Четыре типа использования приведены выше. Лично я думаю, что эффекты, производимые makeCustomAnimation, makeScaleUpAnimation и makeThumbnailScaleUpAnimation, по-прежнему являются эффектами до API 21, и эти три эффекта, похоже, не имеют ничего общего с анимацией перехода. Мы используем больше всего makeSceneTransitionAnimation() Функция эффекта makeSceneTransitionAnimation тесно связана с эффектом анимации перехода. Итак, давайте сосредоточимся на makeSceneTransitionAnimation использование.
Использование анимации перехода Transitionz также предполагает:
- API 21 или выше. Конечно, вы можете использовать ActivityOptionsCompat вместо ActivityOptions вместо ActivityOptions. (Класс совместимости дает нам функцию, гарантирующую, что программа не будет зависать в более низкой версии, но она не может гарантировать, что более низкая версия также может отвечать.)
- Деятельности должно быть разрешено использовать переход, либо установленный в стиле (true), либо установленный напрямую через код (getWindow (). RequestFeature (Window.FEATURE_CONTENT_TRANSITIONS);).
Для использования анимации перехода Transition Activity, мы просто делим на три шага: скажите системе, чтобы она запускала Activity способом Transition, определяла анимацию перехода и устанавливала анимацию перехода.
2.2.1 Скажите системе, чтобы она начала переходный процесс.
Способ запуска действия отличается от предыдущего, и вам нужно указать, чтобы действие начиналось с метода перехода. Сначала вы должны получить ActivityOptions, и вызов startActivity () уже не тот, что раньше, а вызывать startActivity () с двумя параметрами, а второй параметр — ActivityOptions.toBundler. (Конечно, для совместимости с предыдущей версией вы также можете использовать класс совместимости ActivityOptionsCompat, ActivityCompat). Как показано в следующем коде.
Используйте ActivityOptionsCompat, совместимый с кодом до API 21
2.2.2 Определение анимации перехода
Система предоставляет нам три анимации перехода, которые можно использовать напрямую.
Системная анимация по умолчанию | объяснение |
---|---|
взрываться | Переместиться в или из поля зрения из центра сцены |
Горка | Переместиться в или из поля зрения от края сцены |
увядать | Добавить или удалить виды на сцене, регулируя прозрачность |
Существует два способа определения анимации перехода: путь к файлу ресурса и путь к коду.
- Определение анимации перехода в виде файлов ресурсов
После создания папки ресурсов перехода в каталоге res / вы можете определить каждую анимацию в этой папке.
В общем, мы можем написать в следующем виде:
Xml определяет анимацию перехода слайдов, все представление, кроме строки состояния, панели навигации для добавления и уменьшения эффекта анимации.
Среди них имя эффекта анимации. Конечно, вы также можете изменить две другие анимации перехода (взорвать, исчезнуть) системы или напрямую настроить анимацию перехода самостоятельно. Каждый анимационный эффект имеет дополнительные атрибуты. Например, для слайд-анимации слайдов вы можете использовать android: slideEdge = ”top”, чтобы задать направление скольжения; fade fade, исчезать, вы можете использовать android: fadingMode = ”fade_in”, чтобы указать, следует ли постепенно увеличивать (fade_in) или исчезать (fade_out) и т. Д.
Теги позволяют нам более гибко управлять анимацией. Целевой тег может определять целевой идентификатор, который должен быть переведен (или не нуждается в переходе). Этот идентификатор может быть собственным или идентификатором представления в нашем собственном представлении. Каждый идентификатор должен быть определен отдельно в теге. android: targetId указывает представление, чей идентификатор цели должен быть переведен, а android: excludeId указывает, что нам не нужно представление id для перехода.
Вышеуказанное определяет только анимацию перехода, что если мы хотим достичь двух или более эффектов анимации в одном и том же состоянии перехода? Это также просто, замените корневой тег на, а затем определите каждый эффект анимации, и, наконец, не забудьте использовать android: transitionOrdering в корневом теге, чтобы указать порядок представления анимаций этих типов: последовательное означает последовательное выполнение, вместе означает одновременное выполнение. Например, следующий код:
XML определяет две анимации перехода: слайд и исчезновение. Последовательное исполнение. Слайд-анимация вставляется в представление с идентификатором image_shared. Анимация с постепенным исчезновением будет увеличивать и уменьшать вид, кроме строки состояния, панели навигации и идентификатора, для которого image_shared.
- Определенная кодом анимация перехода
Объекты, которые можно определить с помощью файлов ресурсов, тогда мы, безусловно, можем использовать код для достижения, мы используем код для получения файлов ресурсов, соответствующих вышеуказанным различным эффектам анимации:
Несколько соответствующих функций кода и файлов ресурсов
Соответствие кода | XML-корреспонденция | объяснение |
---|---|---|
addTarget() | android:targetId | Укажите целевой вид и позвольте целевому виду участвовать в анимации. |
excludeTarget() | android:excludeId | Отфильтровывать ли указанный вид (участвовать ли в анимации) |
excludeChildren() | Никто | Отфильтровывать ли дочерний View указанной ViewGroup (участвовать ли в анимации) |
Анимация перехода была определена, этого недостаточно, и иногда необходимо отслеживать процесс запуска анимации. Это время для TransitionListener, чтобы появиться. Использовать TransitionListener слишком просто. Вы можете узнать, как его использовать, посмотрев на название каждой функции в TransitionListener.
2.2.3 установить анимацию перехода
Скажите Activity для запуска в режиме перехода, а также определите анимацию перехода. Следующим шагом является настройка анимации перехода. Настройки анимации перехода могут быть установлены одинаково в файле стиля или в коде (приоритет, установленный в коде, выше, чем приоритет файла темы стиля).
Кодовое обозначение | спецификация темы стиля | объяснение |
---|---|---|
getWindow().setEnterTransition() | android:windowEnterTransition | A начинает B, и просмотр в B входит в переход сцены (код местоположения B) |
getWindow().setExitTransition() | android:windowExitTransition | A начинает B, и представление в A выходит из перехода сцены (кодовое местоположение A) |
getWindow().setReturnTransition() | android:windowReturnTransition | B возвращается к A, и просмотр в B выходит из перехода сцены (код местоположения B) |
getWindow().setReenterTransition() | android:windowReenterTransition | B возвращается к A, и представление в A повторно входит в переход сцены (код местоположения A) |
При использовании анимации перехода «Активность» есть настройка для улучшения эффекта отображения. Вы можете установить в теме windowAllowEnterTransitionOverlap и windowAllowReturnTransitionOverlap, чтобы сделать переход анимации более естественным. Среди них windowAllowEnterTransitionOverlap указывает, может ли входная анимация переопределять другие анимации, а windowAllowReturnTransitionOverlap указывает, может ли возвращаемая анимация переопределять другие анимации.
три, Переход общего элемента
Простая общая диаграмма эффектов анимации элемента
Обновите эффект анимации общих элементов
3.1, основные понятия общих элементов
Вы можете обнаружить, что в примере анимации перехода Activity, упомянутом ранее, мы не передали параметры, стоящие за функцией makeSceneTransitionAnimation () в классе ActivityOptions.На самом деле, следующие параметры используются только при использовании общих элементов. Примеры этих параметров пригодятся.
Если вы хотите переключиться с действия A на действие B, и они совместно используют элемент (например, представление), в этом сценарии наилучшим пользовательским опытом может быть непосредственное преобразование общего элемента в конечное место и размер. , Который заставит пользователей сосредоточиться на приложении и иметь связное выражение.
Точкой подключения общих элементов является имя перехода всех общих элементов View. Его можно установить в файле макета (android: transitionName) или в коде (View.setTransitionName (ImageConstants.IMAGE_SOURCE [mCurrentPosition]);). Используйте имя перехода, чтобы определить, какие два элемента являются общими.
С пониманием предыдущего перехода Activity анимация общего элемента становится намного проще для понимания. Как и в случае анимации перехода «Активность», анимация общего элемента также может быть установлена с помощью файлов кода или темы (настройку анимации общего элемента в фрагменте можно сравнить с настройкой анимации общего элемента в операции), как показано ниже.
Кодовое обозначение | спецификация темы стиля | объяснение |
---|---|---|
getWindow().setSharedElementEnterTransition() | android:windowSharedElementEnterTransition | A начинает B, и переход Просмотр общих элементов в B (код местоположения B) |
getWindow().setSharedElementExitTransition() | android:windowSharedElementExitTransition | A запускает B, а просмотр общего элемента переходит в A (расположение кода A) |
getWindow().setSharedElementReturnTransition() | android:windowSharedElementReturnTransition | B возвращает A, переход общего элемента View в B (код местоположения B) |
getWindow().setSharedElementReenterTransition() | android:windowSharedElementReenterTransition | B возвращается к A, и представление в A повторно вводит переход общего элемента (код местоположения A) |
Так же, как анимация перехода «Активность», вы также можете настроить мониторинг обратных вызовов для Transiton, например, мониторинг начала и конца перехода и т. Д.
3.1, обновить соответствие между общими элементами
Есть такая ситуация. Например, наш первый интерфейс представляет собой список (RecyclerView). Каждый элемент представляет собой изображение. Нажмите, чтобы перейти на другую страницу сведений о странице. Страница сведений находится в форме ViewPager. Можно скользить влево и вправо. Иногда мы думаем, что даже если интерфейс сведений перемещается к другим фотографиям, мы хотим получить эффект анимации общего элемента при возвращении на первую страницу. В это время вы должны обновить соответствие между общими элементами.
Как его обновить? Главное — взглянуть на функцию onMapSharedElements () класса SharedElementCallback, которая используется для загрузки общих элементов. Например, если есть такая ситуация, интерфейс A в приведенном выше примере переходит на интерфейс B. Затем интерфейс A должен быть обновлен после возвращения B, а интерфейс B должен быть обновлен перед возвратом. Поэтому установите setExitSharedElementCallback (SharedElementCallback) для интерфейса A и setEnterSharedElementCallback (SharedElementCallback) для интерфейса B. Для более подробной информации, пожалуйста, обратитесь к реализации в примере кода ниже.
Функция onMapSharedElements () в SharedElementCallback setExitSharedElementCallback (SharedElementCallback) будет запускаться во время выхода из операции и повторного входа
Функция onMapSharedElements () в SharedElementCallback функции setEnterSharedElementCallback (SharedElementCallback) будет запускаться при входе и выходе Activity.
3.1 Задержка анимации общего элемента
Иногда это имеет место. Например, если вы хотите отобразить сетевое изображение, эффект анимации этого общего элемента будет бесполезен до получения сетевого изображения. Как мне ждать, пока моя картинка будет завершена, и начать делиться эффектами анимации элементов, эта анимация элементов с задержкой пригодится.
Функция postponeEnterTransition () используется для задержки анимации, а функция startPostponedEnterTransition () используется для запуска отложенной общей анимации. Затем мы можем сделать это, вызвать postponeEnterTransition (), чтобы задержать анимацию при входе в Activity, и вызвать startPostponedEnterTransition (), чтобы запустить анимацию после получения сетевого изображения. Для получения подробной информации, пожалуйста, обратитесь к реализации в примере кода ниже.
Из-за моих ограниченных способностей вышеупомянутое является лишь кратким введением в основное использование Перехода, так что вы можете войти в дверь, вещи в Переходе намного больше, чем ожидание, чтобы каждый открыл для себя.
Источник