Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Android Transition
takahirom
February 15, 2017
Programming
2
3.2k
Android Transition
takahirom
February 15, 2017
Tweet
Share
More Decks by takahirom
See All by takahirom
Android Tools & Performance
takahirom
1
520
Jetpack Compose State Practices
takahirom
1
970
Inside Jetpack Compose
takahirom
1
380
What’s new in Android Jetpack and Tools
takahirom
0
260
ABEMAのKotlin Multiplatform
takahirom
3
3.1k
What's new in Kotlin Coroutines on Android
takahirom
2
2.2k
DroidKaigiアプリの Kotlin Multiplatform
takahirom
2
1.9k
Job, CoroutineContext, CoroutineScopeなどを 整理したい
takahirom
8
1.3k
RxJavaを使っている 既存アプリに Kotlin Coroutinesを導入しよう
takahirom
2
870
Other Decks in Programming
See All in Programming
プロダクトの成長とSREと
takuyatezuka
0
120
Windows コンテナ Dojo 第5回 OpenShift で学ぶ Kubernetes 入門
oniak3ibm
PRO
0
170
僕が便利だと感じる Snow Monkey の特徴/20220723_Gifu_WordPress_Meetup
oleindesign
0
110
RustのWebフレームワーク周りの概観
hayao
0
180
このタイミングで知っておきたい 開発生産性の高いエンジニア組織の特徴とは / dev-sumi-20220721-productivity-features
findyinc
7
2.6k
Rust、何もわからない...#3
estie
0
160
ファーストペンギンを志すものに伝えたい - 1人目のアジャイル推進者がたどった成功と失敗
psj59129
0
100
ストア評価「2.4」だったCOCOARアプリを1年で「4.4」になんとかした方法@Cloud CIRCUS Meetup #2
1901drama
0
180
Introduction to Property-Based Testing @ COSCUP 2022
cybai
1
150
Now in Android Overview
aosa4054
0
390
Efficient UI testing in Android
alexzhukovich
1
120
料理の注文メニューの3D化への挑戦
hideg
0
280
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
506
37k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
7
1.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
37
3.3k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_i
25
15k
Building Applications with DynamoDB
mza
84
4.8k
The Pragmatic Product Professional
lauravandoore
19
3.1k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
107
16k
Debugging Ruby Performance
tmm1
65
10k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
119
28k
Clear Off the Table
cherdarchuk
79
290k
Build The Right Thing And Hit Your Dates
maggiecrowley
19
1.2k
YesSQL, Process and Tooling at Scale
rocio
157
12k
Transcript
"OESPJE5SBOTJUJPO UBLBIJSPN !OFX@SVOOBCMF
荈䊹稱➜ ˖ UBLBIJSPNהְֲせד2JJUBהַ剅ְגְתׅկ ˖ %SPJE,BJHJחג ˑ)PXUPJNQMFNFOU.BUFSJBM%FTJHO"OJNBUJPO˒ד 涪邌׃תׅ 勻גי
5SBOTJUJPOהכ ˖ BOESPJEUSBOTJUJPO5SBOTJUJPOؙٓأ ˖ 醱侧ך4DFOFהְֲٖ؎،ؐز⽃⡘ח㼎׃גծ ،صً٦ءّٝ⡲גֻ
5SBOTJUJPOהכ ˖ ًٔحز ˖ ֿ갹䓸הְזوذٔ،ٕرؠ ؎ٝך،صً٦ءָّٝ㹋鄲דֹ ̔(PPHMFךوذٔ،ٕرؠ؎ٝך罋 㹋鄲ך1MBJEדֻׁⵃ欽ׁגְ ˖ "1*-FWFM
"OESPJE ˖ 4VQQPSU-JCSBSZד⢪ִ״ֲחזך ד"1*-FWFM תד⢪ִ 植朐駈זְ堣腉ָⶴה㢳ְ (PPHMFͷ044 1MBJEΞϓϦΑΓ
5SBOTJUJPOך珏겲 ˖ ⽃♧ך5SBOTJUJPO ˖ 'BEF鷲僇䏝ך،صً٦ءָّٝדֹ ˖ $IBOHF#PVOET7JFXך⹛ֹה7JFXך㣐ֹׁךٔ؟؎ؤ ˖ זוזו ˖
5SBOTJUJPO4FUְֻ̔אַろ ˖ "VUP5SBOTJUJPO⡦5SBOTJUJPO䭷㹀׃זְ儗ךرؿٕؓزך 5SBOTJUJPOկ$IBOHF#PVOETה'BEFָろתגְ ˖ $VTUPN5SBOTJUJPO荈ⴓד㹀纏׃5SBOTJUJPO
5SBOTJUJPOך⡲䧭倯岀 ɾίʔυ͔Βੜ final Transition transition = new ChangeBounds() .setDuration(350) .setInterpolator(new
FastOutSlowInInterpolator()); ˖ YNMַ欰䧭 Transition transition = TransitionInflater .from(context) .inflateTransition(R.transition.change_bounds); // res/transition/change_bounds.xml <?xml version="1.0" encoding="utf-8"?> <changeBounds xmlns:android="http://schemas.android.com/apk/res/ android" android:duration="350" android:interpolator=“@android:interpolator/fast_out_slow_in" />
5SBOTJUJPOؕأةو؎ؤ ˖ 5SBOTJUJPOBEE5BSHFU 7JFXװJEזו ،صً٦ءّׅٝ7JFXせזודⵖꣲׅ ˖ 5SBOTJUJPOTFU1BUI.PUJPOזו⢪ִל嘴ⰼ䕎ך،صً٦ءّٝ 〳腉 "1*-FWFM
˖ ،صً٦ءّٝ禸ך%VSBUJPOװ*OUFSQPMBUPSזו♧鸐⢪ִ final Transition transition = new ChangeBounds() .setDuration(350) .setInterpolator(new FastOutSlowInInterpolator()); transition.setPathMotion(new ArcMotion());
5SBOTJUJPOⵃ欽ׅ倯岀 ˖ ָֿ㛇劤ծ4DFOFⴖ剏ִ ˖ 5SBOTJUJPO.BOBHFSCFHJO%FMBZFE5SBOTJUJPO ٖ؎،ؐزך㢌刿ד荈⹛ד،صً٦ءّٝאֽ ˖ 8JOEPX5SBOTJUJPO 4IBSFE&MFNFOU5SBOTJUJPOֿ➙כָֿ㢳ְ
˖ 4DFOF⢪ֲ
4DFOF⢪ֲ ٖ؎،ؐزה秡➰ֽTDFOFⴖ剏ִך TDFOF" TDFOF# MBZPVU@BYNM MBZPVU@CYNM 5SBOTJUJPO.BOBHFS HP TDFOF#
4DFOF⢪ֲ // Transition࡞ final Transition transition = TransitionInflater .from(context) .inflateTransition(R.transition.transition_arc);
// TransitionΛར༻ͯ͠scene2ʹભҠ TransitionManager.go(arcScene1, transition); 鼂獳儗ח5SBOTJUJPO䭷㹀דֹ
5SBOTJUJPOⵃ欽ׅ倯岀 ˖ ָֿ㛇劤 ˖ ٖ؎،ؐزך㢌刿ד荈⹛ד،صً٦ءّٝאֽ ˖ 8JOEPX5SBOTJUJPO 4IBSFE&MFNFOU5SBOTJUJPOֿ➙כָֿ㢳ְ
w 4DFOFΛ͏ ˖ 5SBOTJUJPO.BOBHFSCFHJO%FMBZFE5SBOTJUJPO
5SBOTJUJPO.BOBHFSCFHJO%FMBZF E5SBOTJUJPO ˖ 5SBOTJUJPO䭷㹀ׇ׆חⵃ欽ׅ㜥さծ㛇劤涸ח⟃♴ֽד، صً٦ءّٝ⳿勻 痥✳䒷侧ד䭷㹀〳腉 TransitionManager.beginDelayedTransition(mSceneRoot); // mSceneRootͷViewΛLayoutParamsΛ͍ͬͯ͡Ҡಈ͞
ͤΔ // params.addRule(…) mFirstButton.setLayoutParams(params);
5SBOTJUJPO.BOBHFSCFHJO %FMBZFE5SBOTJUJPO ˖ ➬穈 ˖ CFHJO%FMBZFE5SBOTJUJPOًاحسָㄎל儗剑ⴱך4DFOFה׃ծ ˖ ٖ؎،ؐزך㢌刿ד7JFXSFRVFTU-BZPVU ָㄎל ˖
如ח0O1SF%SBX-JTUFOFSPO1SF%SBX ָㄎל儗如ך4DFOFהׅ䠬ׄד㹋鄲ׁ גְ 㹋ꥷחכ4DFOFכ⢪זְ 5SBOTJUJPO.BOBHFSCFHJO %FMBZFE5SBOTJUJPO TDFOF 0O1SF%SBX-JTUFOFS PO1SF%SBX WJFXTFU-BZPVU1BSBNT TDFOF "VUP5SBOTJUJPO
5SBOTJUJPO.BOBHFSCFHJO %FMBZFE5SBOTJUJPO ˖ BOESPJEVJUPPMLJUEFNPT IUUQTHJUIVCDPNHPPHMFBOESPJEVJUPPMLJUEFNPT ˖ ֿך؟ٝفٕ،فָٔ4VQQPSU-JCSBSZח״ג؟ٝفٕ 㹋鄲ׁגְגֶׅׅדׅկ
5SBOTJUJPOⵃ欽ׅ倯岀 ˖ ָֿ㛇劤 ˖ ٖ؎،ؐزך㢌刿ד荈⹛ד،صً٦ءّٝאֽ ˖ 4IBSFE&MFNFOU5SBOTJUJPOֿ➙כָֿ㢳ְ
˖ 4DFOF⢪ֲ w 5SBOTJUJPO.BOBHFSCFHJO%FMBZFE5SBOTJUJPO w 8JOEPX5SBOTJUJPO
8JOEPX5SBOTJUJPO "1*-FWFM "OESPJE։ 㛇劤כ珏겲 ˖ ך8JOEPX5SBOTJUJPO "DUJWJUZך剑ⴱך朐䡾ַծ邌爙ׁ䖓ך朐䡾תד،صً٦ ءّٝ圫㶨 ➙㔐כⶴ䠥
˖ ך"DUJWJUZַⰟ鸐ךך5SBOTJUJPOדֹ w 4IBSFE&MFNFOU5SBOTJUJPO
4IBSFE&MFNFOU5SBOTJUJPO ɾࢦఆํ๏ ςʔϚʹΑΔࢦఆ <item name=“android:windowSharedElementEnterTransition">@transition/ shared_element</item> ίʔυʹΑΔࢦఆ activity.getWindow().setSharedElementEnterTransition(sharedEnter);
4IBSFE&MFNFOU5SBOTJUJPO ࣮ํ๏ৄࡉ
None
None
4IBSFE&MFNFOU5SBOTJUJPO ࣮ํ๏ৄࡉ
4IBSFE&MFNFOU5SBOTJUJPO ך➬穈 EFDPS7JFXOE/BNFE7JFXT TIBSFE&MFNFOUT דUSBOTJUJPO/BNFָאְ7JFXⰋג《⳿ׅ &OUFS5SBOTJUJPO$PPSEJOBUPS 植㖈ךٖ؎،ؐزך7JFXך⡘縧⥂㶷
"DUJWJUZ5SBOTJUJPO$PPSEJOBUPS "DUJWJUZ鼂獳ד床גֹ#VOEMFח״ծ⯋ךٖ؎،ؐزך⡘縧ד7JFXMBZPVU ㄎן⳿ׅ "DUJWJUZ5SBOTJUJPO$PPSEJOBUPS 5SBOTJUJPO.BOBHFSCFHJO%FMBZFE5SBOTJUJPO 5SBOTJUJPO䭷㹀׃גㄎן⳿ׅ &OUFS5SBOTJUJPO$PPSEJOBUPS ⯋ך⥂㶷׃גְֶ7JFXך⡘縧ד7JFXMBZPVU ㄎן⳿ׅ "DUJWJUZ5SBOTJUJPO$PPSEJOBUPS 5SBOTJUJPO.BOBHFSCFH JO%FMBZFE5SBOTJUJPO TDFOF ભҠݩͷ7JFXͷҐஔ 0O1SF%SBX-JTUFOFS PO1SF%SBX WJFXMBZPVU MFGU UPQ SJHIU CPUUPN TDFOF ભҠઌͷ7JFXͷҐஔ ࢦఆͨ͠5SBOTJUJPO WJFXMBZPVU MFGU UPQ SJHIU CPUUPN [ݺΕͨଆͷActivityͷ෦ͷॲཧ(API Level 25ͷίʔυΑΓ)] ؒҧ͍ͬͯͨΒίϝϯτ͍ͩ͘͞
ֿֿתדד⳿勻ֿה .BUFSJBM%FTJHOך$IPSFPHSBQIZ 䮶➰ֽ ָ 㹋鄲׃װֻׅז ꟼ⤘䚍僇澗חׅ
ֿֿתדד⳿勻ֿה <?xml version="1.0" encoding="utf-8"?> <transitionSet xmlns:android="http://schemas.android.com/apk/res/and xmlns:app="http://schemas.android.com/apk/res-auto" android:duration="375" android:interpolator="@android:interpolator/fast_out_slow_in"> <changeBounds
/> <fade android:duration="150" android:startDelay="75"> <targets> <target android:targetName="all_content_element_nonshare_te </targets> </fade> </transitionSet> 5SBOTJUJPOʹམͱ͠ࠐΊΔ
$VTUPN5SBOTJUJPO 044ך(PPHMF1MBJE،فٔ״ ˖ 歗鼂獳儗ך5SBOTJUJPO ˖ 'MPBUJOH"DUJPO#VUUPOך5SBOTJUJPO ˖ 嗚稊璞ך5SBOTJUJPO ̔%SPJE,BJHJדֶ鑧׃תׅ ע
罋项俱 ˖ "OJNBUJOH7JFXT6TJOH4DFOFTBOE5SBOTJUJPOTIUUQTEFWFMPQFSBOESPJEDPNUSBJOJOH USBOTJUJPOTJOEFYIUNM ˖ %FW#ZUFIUUQTXXXZPVUVCFDPNXBUDI GFBUVSFQMBZFS@FNCFEEFEW4)O+2B% ˖ ⹛ַׅ %FW'FTU,BOTBJ
IUUQZBSBLJHJUIVCJPTMJEFTEFWGFTULBOTBJ JOEFYIUNM ˖ 5SBOTJUJPOTJOUIF"OESPJE4VQQPSU-JCSBSZIUUQTNFEJVNDPNHPPHMFEFWFMPQFST USBOTJUJPOTJOUIFBOESPJETVQQPSUMJCSBSZCDBEFGFTVIE ˖ BOESPJEVJUPPMLJUEFNPTIUUQTHJUIVCDPNHPPHMFBOESPJEVJUPPMLJUEFNPT ˖ 4VQQPSU-JCSBSZGPS5SBOTJUJPOT0WFSWJFXBOEDPNQBSJTPOXJUI5SBOTJUJPOT&WFSZXIFSF IUUQTNFEJVNDPN!BOELVMJLPWTVQQPSUMJCSBSZGPSUSBOTJUJPOTPWFSWJFXBOE DPNQBSJTPODCFDGDCVED[ONVZ