$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Android Transitions
Search
Bryan Herbst
February 06, 2016
Programming
0
520
Android Transitions
A tour of the Transitions framework in Android
Bryan Herbst
February 06, 2016
Tweet
Share
More Decks by Bryan Herbst
See All by Bryan Herbst
Semantics in Jetpack Compose
bherbst
0
12k
Kotlin Multiplatform
bherbst
0
890
Android App Architecture & Navigation
bherbst
0
2k
What's in the Android Toolbox
bherbst
0
530
Gradle Deep Dive
bherbst
2
2k
Actions with Google
bherbst
0
1.4k
Databinding in Android
bherbst
0
450
Activities Vs. Fragments
bherbst
0
360
Android Transitions
bherbst
0
64
Other Decks in Programming
See All in Programming
Promise.tryで実現する新しいエラーハンドリング New error handling with Promise try
bicstone
3
1.7k
GraalVM Native Image トラブルシューティング機能の最新状況(2025年版)
ntt_dsol_java
0
170
社内オペレーション改善のためのTypeScript / TSKaigi Hokuriku 2025
dachi023
1
130
最新のDirectX12で使えるレイトレ周りの機能追加について
projectasura
0
310
jakarta-security-jjug-ccc-2025-fall
tnagao7
0
100
モビリティSaaSにおけるデータ利活用の発展
nealle
1
660
目的で駆動する、AI時代のアーキテクチャ設計 / purpose-driven-architecture
minodriven
11
3.6k
251126 TestState APIってなんだっけ?Step Functionsテストどう変わる?
east_takumi
0
270
Combinatorial Interview Problems with Backtracking Solutions - From Imperative Procedural Programming to Declarative Functional Programming - Part 1
philipschwarz
PRO
0
110
「正規表現をつくる」をつくる / make "make regex"
makenowjust
1
970
JEP 496 と JEP 497 から学ぶ耐量子計算機暗号入門 / Learning Post-Quantum Crypto Basics from JEP 496 & 497
mackey0225
2
500
All(?) About Point Sets
hole
0
230
Featured
See All Featured
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
15k
Done Done
chrislema
186
16k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.2k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
118
20k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
990
Building Flexible Design Systems
yeseniaperezcruz
329
39k
Producing Creativity
orderedlist
PRO
348
40k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.1k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.1k
Transcript
Transitions Bryan Herbst Android Engineer @ Target
Abrupt transitions are jarring
Smooth transitions provide continuity
Smooth transitions keep users engaged
Smooth transitions delight users
“In the world of material design, motion describes spatial relationships,
functionality, and intention with beauty and fluidity.”
Android Transitions Activity to Activity Fragment to Fragment
Scene to Scene (Views)
Hold on… Requires API 21
Hold on… Progressive enhancement, graceful degradation
Hold on… Support APIs offer default behavior
on older versions
Scenes Snapshot of a ViewGroup
Scene transition TransitionManager.beginDelayedTransition(rootView, new Fade()); button.setVisibility(View.INVISIBLE);
What is this black magic?
How it works 1. beginDelayedTransition() => Take a snapshot of
ViewGroup 2. Update Views 3. On next layout pass, Android takes another snapshot and creates animations
How it works 1. beginDelayedTransition() => Take a snapshot of
ViewGroup
How it works 1. beginDelayedTransition() => Take a snapshot of
ViewGroup 2. Update Views
Transition types Fade Explode Slide ChangeBounds
AutoTransition Fade Move Resize
What about property animation? ObjectAnimator.ofFloat(button, "alpha", 1f, 0f) .start();
What about property animation? button.animate().alpha(0f);
What about property animation? Fine if you want to think
about Views individually
What about property animation? Fine if you want to think
about Views individually Scenes allow us to think in groups
Activities With shared elements
Activity Transitions- setup Request Window.FEATURE_ACTIVITY_TRANSITIONS and Window.FEATURE_CONTENT_TRANSITIONS in both
Activities
Activity Transitions- setup Set a transition name on
the View in both Activities
What are these transition names? An ID for the transition
framework
Rule #1 All animating Views must have a transition name
Rule #2 All transition names must be unique within a
layout
Not a rule #1 Transition names don’t need to match
between layouts
Activity Transitions- setup Create a Bundle with ActivityOptions .makeSceneTransitionAnimation(activity,
sharedView, viewTransitionName) .toBundle();
Activity Transitions- setup Set your Transitions
Activity Transitions- setup Call startActivity(intent, transitionBundle);
Specifying shared elements makeSceneTransitionAnimation(activity, sharedView, transitionName); We specify pairs of
Views and transition names.
Specifying shared elements makeSceneTransitionAnimation(activity, sharedView, transitionName); We specify pairs of
Views and transition names. The sharedView is the original view in our current layout (the starting state)
Specifying shared elements makeSceneTransitionAnimation(activity, sharedView, transitionName); We specify pairs of
Views and transition names. The sharedView is the original view in our current layout (the starting state) The viewTransitionName is the name of the corresponding view in the new layout (the ending state)
Activity transitions magic Captures Views in first Activity, then second
Activity
Activity Transitions use the Window e.g. getWindow().setEnterTransition(new Fade());
Four transition types Enter Exit Reenter
Return
Four transition types Enter
Four transition types Exit
Four transition types Reenter
Four transition types Return
Four transition types x2 with Shared elements
Or not Stick with enter and return for shared elements
Shared exit and reenter Allow for animation before the transition
Sample Exit, shared enter, enter
Sample Reenter, shared return, return
A note on timing Because sometimes Views don’t exist right
away
Delayed transitions postponeEnterTransition(); startPostponedEnterTransition();
WARNING! Blocks transition
WARNING! Blocks transition
WARNING! Prefetch or find clever alternatives
Fragment example
Transition setup setExitTransition(new Fade()); Fade out non-shared elements
Transition setup newFrag.setSharedElementEnterTransition(new AutoTransition()); AutoTransition shared elements
Transition setup newFrag.setEnterTransition(new Fade()); Fade in non-shared elements
Making the transition fragmentManager.beginTransaction() .replace(R.id.container, newFrag) .addSharedElement(sharedView, "transitionName") .commit();
What about delayed transitions? Ugh. It isn’t good in
Fragments.
I didn’t want to animate that!
Targets- includes <fade> <targets> <target android:includeId="@id/fancyWidget"/> <target android:includeClass=“com.example.FancyWidget"/> <target android:includeName=“fancyWidget"/>
</targets> </fade>
Targets- excludes <fade> <targets> <target android:excludeId="@id/toolbar"/> <target android:excludeClass=“android.support.v7.widget.Toolbar"/> <target android:excludeName="toolbar"/>
</targets> </fade>
Support for <21
Support for <21 ActivityOptions => ActivityOptionsCompat .makeSceneTransitionAnimation(activity, view, name)
Support for <21 startActivity(intent, transitionBundle); Has existed since API 16!
Support for <21 Transition names android:transitionName="name" is ignored on
older versions ViewCompat.setTransitionName(view, “name);
Support for <21 Delaying transitions supportPostponeEnterTransition(); supportStartPostponedEnterTransition();
Support for <21 Specifying transitions The only place we need
a version check if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { getWindow().setEnterTransition(new Fade()); }