Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Android Transitions
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Bryan Herbst
February 06, 2016
Programming
600
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Android Transitions
A tour of the Transitions framework in Android
Bryan Herbst
February 06, 2016
Transcript
66 slides
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()); }
More Decks by Bryan Herbst
See All by Bryan Herbst
Semantics in Jetpack Compose
bherbst
0
13k
Kotlin Multiplatform
bherbst
0
1k
Android App Architecture & Navigation
bherbst
0
2.2k
What's in the Android Toolbox
bherbst
0
580
Gradle Deep Dive
bherbst
2
2.2k
Actions with Google
bherbst
0
1.6k
Databinding in Android
bherbst
0
490
Activities Vs. Fragments
bherbst
0
400
Android Transitions
bherbst
0
81
Other Decks in Programming
See All in Programming
TanStack Vue Query と Pinia Colada から学ぶ非同期状態の型設計
aoshi
0
650
AI駆動開発4年目の現在地(『あなたはFDEになるべきか?』イベント資料)
kumaiu
0
590
Modernizing iOS Apps
seyfoyun
0
150
地方こそサーバーレス — 10年続けた、顔が見えるチームで確かな基盤を / Serverless Matters Most in Regional Areas — 10 Years of Building Reliable Foundations with Close-Knit Teams
seike460
PRO
1
340
AI時代のTerminal環境を UNIX哲学で設計・運用する
yasunori0418
1
350
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
3
1.5k
PumaからFalconに移行したRailsアプリケーションでの実践
falcon8823
0
370
Getting Started with Vibe Coding
miccheng
0
200
Lambda durable functionsでHuman in the Loopを楽に…楽に……
har1101
2
300
Performance Optimization With LLMs
xleitix
0
250
Vapor Mode でアクセシビリティは 壊れないか検証した話
fuqda
1
340
Seven New Principles of Software Engineering
yegor256
0
480
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
68
60k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3.1k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
980
Speed Design
sergeychernyshev
33
2.2k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
630
Building Applications with DynamoDB
mza
96
7.3k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
2
2.1k
It's Worth the Effort
3n
188
29k
4 Signs Your Business is Dying
shpigford
187
23k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
3
3.9k