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
How to implement material design animation droi...
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
takahirom
May 07, 2017
Programming
1.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
How to implement material design animation droid girls version
編集中です。
takahirom
May 07, 2017
More Decks by takahirom
See All by takahirom
AIエージェントで 変わるAndroid開発環境
takahirom
3
980
AndroidアプリのAI実装をAndroidifyで学ぶ ー Google公式サンプルによる体験と実装 ー
takahirom
0
170
AIエージェントによるテストフレームワーク Arbigent
takahirom
0
1.2k
Google の LLM ライブラリ を Android アプリで 使うには?
takahirom
1
2.2k
Robolectric Native Graphics and Roborazzi
takahirom
1
2.4k
Androidアプリで安定して動作させ継続的に開発するために設計の原則を利用して開発した話
takahirom
3
1.5k
Android Tools & Performance
takahirom
1
1.3k
Jetpack Compose State Practices
takahirom
1
1.5k
Inside Jetpack Compose
takahirom
1
1.1k
Other Decks in Programming
See All in Programming
AI時代のコードレビューは人に向けるな、仕組みに向けろ
texmeijin
5
3.5k
IBM Bob Dojo #1 仕様駆動開発入門
oniak3ibm
PRO
0
350
contenteditable と日本語入力に向き合う
colorful12
0
140
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
460
SalesForceを内製化!? ~ HR事業を支える顧客管理基盤のインフラを大公開 ~
oku053
0
130
R8 の設定見直しでアプリサイズ削減
andpad
0
180
Everything will be SERVERLESS — 信じて運用した10年の経験値 / Everything Will be Serverless — Lessons Learned from 10 Years of Operational Experience
seike460
PRO
1
760
setup-vp GitLab対応の裏側
naokihaba
0
150
カツオ、ご期待ください
suneo3476
0
150
Apple Intelligence を用いた個人情報誤送信防止、及びユーザーリクエスト体験の改善について
yukiny
0
310
Workers Cache を知る
syumai
0
340
Augmenting AI with the Power of Jakarta EE
ivargrimstad
0
460
Featured
See All Featured
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
460
How STYLIGHT went responsive
nonsquared
100
6.3k
New Earth Scene 8
popppiees
4
2.6k
The Pragmatic Product Professional
lauravandoore
37
7.5k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
69
66k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
460
The Invisible Side of Design
smashingmag
301
52k
Between Models and Reality
mayunak
4
480
A Modern Web Designer's Workflow
chriscoyier
699
190k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
530
How Software Deployment tools have changed in the past 20 years
geshan
2
35k
Transcript
)PXUPJNQMFNFOU NBUFSJBMEFTJHOBOJNBUJPO %SPJE(JSMT晛 UBLBIJSPN
˖ 劤せכ嬁「䃨峔 ׄױַמ ˖ "OESPJEָ㥨ֹ ˖ UBLBIJSPNהְֲせד 2JJUBהַ剅ְגְךד ״׃ֶֻ격ְ׃תׅ
荈䊹稱➜
– Motion Lead @Google. John Schlemmer “one of the main
components of what makes material, material. ”
˖ ٌ٦ءّٝךꅾ銲䚍 ˖ ٌ٦ءّٝך⾱ ˖ ؖ؎سٓ؎ٝה㹋鄲 ˖ "OESPJE劢弫ך畭劣דוֲ㹋鄲ַׅ ˖ תה
湡如
ז،صً٦ءׇׁّٝ ַ
˖ ؽُ٦ך搊挿ךؖ؎س ˖ ِ٦ؠ٦ָ乼⡲㸣✪ׅה⡦ָ饯ֹךַؼٝز爙ׅ ˖ 銲稆ךꥡ㾴涸ծ瑞涸זꟼ⤘ ˖ 胜䖓ד遤גְⳢ椚؝ٝذٝخך《䖤ծ 如ךؽُ٦ך铣鴥זוַ岣湡ׅ ˖
ٍؙؗٓة٦ծ峤箺ծ嚂׃ ٌ٦ءّٝךꅾ銲䚍 罋ִֿה幾ׅ ⴓַװֻׅ .BUFSJBM%FTJHO(VJEFMJOF״
וֲװג وذٔ،ٕرؠ؎ٝד ،صً٦ءַׇׁّٝ
˖ 3FTQPOTJWF ̔⽯䏟ח䘔׃ג鸞䏝ָ鸞ְ ٌ٦ءّٝך⾱ .BUFSJBM%FTJHO(VJEFMJOF״ %SPJE,BJHJPDJBM"OESPJEBQQ״
˖ 3FTQPOTJWF ̔⽯䏟ח䘔׃ג鸞䏝ָ鸞ְ ˖ /BUVSBM ̔荈搫ז⹛ֹ ٌ٦ءّٝך⾱ .BUFSJBM%FTJHO(VJEFMJOF״
˖ 3FTQPOTJWF ̔⽯䏟ח䘔׃ג鸞䏝ָ鸞ְ ˖ /BUVSBM ̔荈搫ז⹛ֹ ˖ "XBSF ̔➭ךوذٔ،ٕה䓼锃⹛⡲ ٌ٦ءّٝך⾱
.BUFSJBM%FTJHO(VJEFMJOF״
˖ 3FTQPOTJWF ̔⽯䏟ח䘔׃ג鸞䏝ָ鸞ְ ˖ /BUVSBM ̔荈搫ז⹛ֹ ˖ "XBSF ̔➭ךوذٔ،ٕה䓼锃⹛⡲ ˖
*OUFOUJPOBM ̔䠐㔳ָ֮ ٌ٦ءّٝך⾱ .BUFSJBM%FTJHO(VJEFMJOF״ %SPJE,BJHJPDJBM"OESPJEBQQ QVMM ״
וֲ㹋鄲ַׅ
NBUFSJBMFMFNFOU IUUQHJUJPFMFNFOU ؟ٝفٕ،فٔ⡲ת׃
وذٔ،ٕرؠ؎ٝ ؖ؎سٓ؎ٝ ⯋ח⡲䧭 HJUJPFMFNFOU
א׆אؖ؎سٓ؎ַٝ 鷄ג״ֲ
˖ وذٔ،ٕرؠ؎ٝ ˖ ٌ٦ءّٝ ˖ أة؎ٕ ˖ ٖ؎،ؐز ˖ ؝ٝه٦طٝز
˖ ػة٦ٝ ˖ 㷕统ה䞔㜠䲿⣘ ˖ ِ٦ؠؽٔذ؍ ˖ ٔا٦أ وذٔ،ٕرؠ؎ٝؖ؎سٓ؎ٝ אך畍ַ圓䧭ׁ
ؖ؎سٓ؎ٝⰻך%SPJE,BJHJד 铡僇׃鿇ⴓ ˖ وذٔ،ٕرؠ؎ٝ ˖ 넝䏝הءٍسؐ ˖ ٌ٦ءّٝ ˖ 竰竲儗ה؎٦آؚٝ
˖ 麊⹛ ˖ وذٔ،ٕך㢌䕎 ˖ ؝ؚٖؔٓؿ؍ ˖ ؙٔؒ؎ذ؍ـזؕأةو؎ؤ ˖ ػة٦ٝ ˖ 歗⫷ך铣鴥 ˖ 歗鼂獳
ؖ؎سٓ؎ٝⰻך铡僇ׅ鿇ⴓ ˖ وذٔ،ٕرؠ؎ٝ ˖ 넝䏝הءٍسؐ ˖ ٌ٦ءّٝ ˖ 竰竲儗ה؎٦آؚٝ ˖
麊⹛ ˖ ؝ؚٖؔٓؿ؍ ˖ ػة٦ٝ ˖ 歗⫷ך铣鴥 ˖ 歗鼂獳
˖ وذٔ،ٕرؠ؎ٝ ˖ 넝䏝הءٍسؐ ˖ ٌ٦ءّٝ ˖ 竰竲儗ה؎٦آؚٝ ˖ 麊⹛
˖ ؝ؚٖؔٓؿ؍ ˖ ػة٦ٝ ˖ 歗⫷ך铣鴥 ˖ 歗鼂獳 ؖ؎سٓ؎ٝⰻך铡僇ׅ鿇ⴓ
넝䏝הءٍسؐ 䕦ח岣湡 ةحف儗ח嵤ֹ♳ָג鋅ִ %SPJE,BJHJPDJBM"OESPJEBQQ״
넝䏝הءٍسؐ ٖأهٝءـ넝䏝ה⹛涸넝䏝ؔؿإحز ؖ؎سٓ؎ٝ ةحف儗ח7JFXEQ♳ָ EQ⹛涸넝䏝ؔؿإحز 䬃׃גזְ儗ך 넝䏝 䬃׃גְהֹך 넝䏝 'MPBUJOH"DUJPO#VUUPO
EQ EQ #VUUPO EQ EQ $BSE EQ EQ
ٖأهٝءـ넝䏝ה⹛涸넝䏝ؔؿإحز 㹋鄲 <ImageView android:id="@+id/shot" android:layout_width=“wrap_content" android:layout_height="wrap_content" android:elevation="@dimen/z_card" android:stateListAnimator="@animator/raise" android:foreground="@drawable/mid_grey_ripple" app:badgeGravity="end|bottom"
app:badgePadding="@dimen/padding_normal" /> TUBUF-JTU"OJNBUPSכ"1*-FWFM劢弫ד搀鋔ׁ "1*-FWFM "OESPJE TUBUF-JTU"OJNBUPS⢪ֲ ٖ؎،ؐز9.-ⰻ
ٖأهٝءـ넝䏝ה⹛涸넝䏝ؔؿإحز 㹋鄲 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true" android:state_pressed="true"> <objectAnimator android:duration="@android:integer/config_shortAnimTime" android:propertyName="translationZ"
android:valueTo="@dimen/touch_raise" /> </item> <item> <objectAnimator android:duration="@android:integer/config_shortAnimTime" android:propertyName="translationZ" android:valueTo="0dp" /> </item> </selector> BOJNBUPS@SBJTFYNM
ٖأهٝءـ넝䏝ה⹛涸넝䏝ؔؿإحز 㹋鄲 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true" android:state_pressed="true"> <objectAnimator android:duration="@android:integer/config_shortAnimTime" android:propertyName="translationZ"
android:valueTo="@dimen/touch_raise" /> </item> <item> <objectAnimator android:duration="@android:integer/config_shortAnimTime" android:propertyName="translationZ" android:valueTo="0dp" /> </item> </selector> 䬃׃גְהֹך،صً٦ءّٝ 䭷㹀ׅ BOJNBUPS@SBJTFYNM
ٖأهٝءـ넝䏝ה⹛涸넝䏝ؔؿإحز 㹋鄲 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true" android:state_pressed="true"> <objectAnimator android:duration="@android:integer/config_shortAnimTime" android:propertyName="translationZ"
android:valueTo="@dimen/touch_raise" /> </item> <item> <objectAnimator android:duration="@android:integer/config_shortAnimTime" android:propertyName="translationZ" android:valueTo="0dp" /> </item> </selector> USBOTJUJPO;EQחׅ BOJNBUPS@SBJTFYNM
ٖأهٝءـ넝䏝ה⹛涸넝䏝ؔؿإحز 㹋鄲 <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_enabled="true" android:state_pressed="true"> <objectAnimator android:duration="@android:integer/config_shortAnimTime" android:propertyName="translationZ"
android:valueTo="@dimen/touch_raise" /> </item> <item> <objectAnimator android:duration="@android:integer/config_shortAnimTime" android:propertyName="translationZ" android:valueTo="0dp" /> </item> </selector> BOJNBUPS@SBJTFYNM EQ ההך&MFWBUJPO EQ ⹛涸넝䏝ؔؿإحز EQ חז
ؖ؎سٓ؎ٝⰻך铡僇ׅ鿇ⴓ ˖ وذٔ،ٕرؠ؎ٝ ˖ 넝䏝הءٍسؐ ˖ ٌ٦ءّٝ ˖ 竰竲儗ה؎٦آؚٝ ˖
麊⹛ ˖ ؝ؚٖؔٓؿ؍ ˖ ػة٦ٝ ˖ 歗⫷ך铣鴥 ˖ 歗鼂獳
竰竲儗 騃ꨄָꞿְקו،صً٦ءّٝ儗ָꞿְ
˖ NT馄ִזְ״ֲחׅ QMBJEזודך،صً٦ءַّٝ 䱿庠 ˖ NTַNTךד ⹛ַׅ騃ꨄח״ג锃侭 ˖ ةـٖحزזוך畭劣ח
״ג㢌ִקֲָ葺ְ 㣐ְֹ畭劣קוꞿֻ ˖ TFU%VSBUJPO ⵃ欽ׅ 竰竲儗
ؖ؎سٓ؎ٝⰻך铡僇ׅ鿇ⴓ ˖ وذٔ،ٕرؠ؎ٝ ˖ 넝䏝הءٍسؐ ˖ ٌ٦ءّٝ ˖ 竰竲儗ה؎٦آؚٝ ˖
麊⹛ ˖ ؝ؚٖؔٓؿ؍ ˖ ػة٦ٝ ˖ 歗⫷ך铣鴥 ˖ 歗鼂獳
؎٦آؚٝ &BTJOH$VSWFTכ،صً٦ءّٝך أؾ٦سװ鷲僇䏝ծ㣐ֹׁזוח黝䘔ׁ
ٌ٦ءّٝ؎٦آؚٝ ؖ؎سٓ؎ٝ Ͳ͜Ͱ͏͔ ඪ४Χʔϒ4UBOEBSEDVSWF ը໘Ͱͷӡಈ ݮΧʔϒ%FDFMFSBUJPODVSWF ը໘ʹೖΔӡಈ ՃΧʔϒ"DDFMFSBUJPODVSWF ը໘͔Βग़Δӡಈ ٸΧʔϒ4IBSQDVSWF
͍ͭͰը໘ʹೖΕΔΦϒδΣΫτ ͷӡಈ
ٌ٦ءّٝ؎٦آؚٝ 㹋鄲 Ͳ͏࣮͢Δ͔ ඪ४Χʔϒ4UBOEBSEDVSWF 'BTU0VU4MPX*O*OUFSQPMBUPS ݮΧʔϒ%FDFMFSBUJPODVSWF -JOFBS0VU4MPX*O*OUFSQPMBUPS ՃΧʔϒ"DDFMFSBUJPODVSWF 'BTU0VU-JOFBS*O*OUFSQPMBUPS ٸΧʔϒ4IBSQDVSWF
1BUI*OUFSQPMBUPS$PNQBU DSFBUF G G ViewPropertyAnimatorΛͬͨࢦఆํ๏ view.animate() .translationX(100) .setDuration(290) .setInterpolator(new FastOutSlowInInterpolator()) .start(); "1*-FWFM
وذٔ،ٕرؠ؎ٝؖ؎سٓ؎ٝ ➙㔐《♳־،صً٦ءّٝ鿇ⴓ ˖ وذٔ،ٕرؠ؎ٝ ˖ 넝䏝הءٍسؐ ˖ ٌ٦ءّٝ ˖ 竰竲儗ה؎٦آؚٝ
˖ 麊⹛ ˖ ؝ؚٖؔٓؿ؍ ˖ ػة٦ٝ ˖ 歗⫷ך铣鴥 ˖ 歗鼂獳
麊⹛ 植㹋ך⚅歲הずׄ״ֲח♴倯ぢחꅾ⸂ָ֮ךד ♴ך倯ぢח花䕎חז
麊⹛ 㹋鄲
麊⹛ 㹋鄲 ext, TransformingActivity.class); nsCompat.makeSceneTransitionAnimation( iew,getString(R.string.transition_name)).toBundle(); ontext, intent, options); .BJO"DUJWJUZ
5SBOTGPSNJOH"DUJWJUZ <ImageView android:layout_width="mat android:layout_height="wr android:transitionName="@ <style name="AppTheme.No ٖ؎،ؐز ذ٦و
"DUJWJUZ0QUJPOT$PNQBUד 鼂獳⯋7JFXה鼂獳⯓ך7JFX 穠ןאֽג"DUJWJUZ饯⹛ Intent intent = new Intent(context, TransformingActivity.class); Bundle
options = ActivityOptionsCompat.makeSceneTransitionAnimation( context, fromView, getString(R.string.transition_name)).toBundle(); ActivityCompat.startActivity(context, intent, options); .BJO"DUJWJUZ
5SBOTGPSNJOH"DUJWJUZ <ImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:transitionName="@string/transition_name"/> <style name="AppTheme.NoActionBar.Detail"> <item name="android:windowSharedElementEnterTransition">@transition/ default_share</item>
<item name="android:windowSharedElementReturnTransition">@transition/ ٖ؎،ؐز ذ٦و ٖ؎،ؐزדUSBOTJUJPO/BNF䭷㹀
<ImageView android:layout_width="match_parent" android:layout_height="wrap_content" android:transitionName="@string/transition_name"/> <style name="AppTheme.NoActionBar.Detail"> <item name="android:windowSharedElementEnterTransition">@transition/ default_share</item> <item
name="android:windowSharedElementReturnTransition">@transition/ default_share</item> </style> ٖ؎،ؐز ذ٦و 5SBOTJUJPO <?xml version="1.0" encoding="utf-8"?> <transitionSet .. android:duration="350" android:interpolator="..."> <changeBounds/> ذ٦وד5SBOTJUJPO䭷㹀
android:layout_height="wrap_content" android:transitionName="@string/transition_name"/> <style name="AppTheme.NoActionBar.Detail"> <item name="android:windowSharedElementEnterTransition">@transition/ default_share</item> <item name="android:windowSharedElementReturnTransition">@transition/ default_share</item>
</style> ذ٦و 5SBOTJUJPO <?xml version="1.0" encoding="utf-8"?> <transitionSet .. android:duration="350" android:interpolator="..."> <changeBounds/> <pathMotion class="**.GravityArcMotion" /> </transitionSet> QBUI.PUJPO䭷㹀 ֿח״嘴ⰼ䕎חז DIBOHF#PVOETד獳⹛ 㣐ֹׁ㢌⻉
麊⹛ 㹋鄲 QBUI.PUJPOⵃ欽ׅկ ׃垥彊ך"SD.PSUJPOؙٓأⵃ欽 ׅה♳ח花،صً٦ءّٝד ♶黝ⴖהׁגְ⹛ֹהז IUUQTEFWFMPQFSBOESPJEDPNSFGFSFODFBOESPJEUSBOTJUJPO"SD.PUJPOIUNM "1*-FWFM 5SBOTJUJPOך䭷㹀⢽ ❌
˖ 1MBJEח"SD.PUJPOؙٓأ 䭁䓸׃(SBWJUZ"SD.PUJPOؙٓأָ ֮ QMBJE(SBWJUZ"SD.PUJPOKBWB ˖ ծك٦أה׃גְ ؿٖ٦يٙ٦ؙך؝٦سָ〢ֻծ 暴㹀ך勴⟝ך儗ח ֲתֻ،صً٦ءّٝ׃זְծ⡲
湫׃ QMBJEחفؙٕٔؒأز鷏ת׃ NBUFSJBMFMFNFOU (SBWJUZ"SD.PUJPOKBWB 荈搫ז䓜⡲חכ ˟1MBJEהכ(PPHMFךوذٔ،ٕرؠ؎ٝך ؔ٦فٝا٦أך罋㹋鄲דַאرؠ؎ٝصُ٦أ،فٔ <?xml version="1.0" encoding="utf-8"?> <transitionSet … android:duration="350" android:interpolator=“…”> <changeBounds/> <pathMotion class=“**.GravityArcMotion” /> </transitionSet>
ؖ؎سٓ؎ٝⰻך铡僇ׅ鿇ⴓ ˖ وذٔ،ٕرؠ؎ٝ ˖ 넝䏝הءٍسؐ ˖ ٌ٦ءّٝ ˖ 竰竲儗ה؎٦آؚٝ ˖
麊⹛ ˖ ؝ؚٖؔٓؿ؍ ˖ ػة٦ٝ ˖ 歗⫷ך铣鴥 ˖ 歗鼂獳
˖ ההךせכ.FBOJOHGVM USBOTJUJPO 䠐ך֮鼂獳 ˖ ˑ⹛ֹך֮وذٔ،ٕדכծ鼂獳⚥ ח銲稆Ⱏ剣ֿׅהדծ乼⡲⚥ך ِ٦ؠ٦ך搊挿㼪ֹתׅկ˒ ؝ؚٖؔٓؿ؍
؝ؚٖؔٓؿ؍ 鸬竲䚍ؖ؎سٓ؎ٝ ˖ ؝ٝذٝخךׅץגך銲稆ָ Ⱏ剣ׁ㜥さ ˖ ؝ٝذٝخך銲稆ָקהוծ תכתֻⰟ剣ׁזְ㜥さ Ⱏ剣׃זְ㜥さכ 胜兝ךؕ٦سךⰟ剣
"1*-FWFM
؝ؚٖؔٓؿ؍ 鸬竲䚍ؖ؎سٓ؎ٝ ։࢝࣌ؒ ऴྃ࣌ؒ $BSEͷԣ෯ NT NT $BSEͷॎ෯ NT NT
4IBSFE&MFNFOUͷ YͷҐஔ NT NT 4IBSFE&MFNFOUͷ ZͷҐஔ NT NT දࣔ͞ΕΔ7JFXͷ ಁ໌ NT NT
؝ؚٖؔٓؿ؍ 鸬竲䚍㹋鄲 'BCָ䎢ָ،صً٦ءّٝהずׄ״ֲח 4IBSFE&MFNFOU5SBOTJUJPOⵃ欽ׅ 簚ה埆ך،صً٦ءّٝך㨣儗ךؤٖ 邌植ׅח$VTUPN5SBOTJUJPO⡲䧭 AnimatorSet animatorSet = new
AnimatorSet(); … widthAnim.setDuration(275); heightAnim.setStartDelay(30); heightAnim.setDuration(345); animatorSet.playTogether(widthAnim, heightAnim); "1*-FWFM
4IBSFE&MFNFOU5SBOTJUJP ⵃ欽ׅػة٦ָٝ㢳ְךד ֲ㼰׃䱠♴־תׅ
鸬竲䚍㹋鄲ׅח "DUJWJUZ5SBOTJUJPOך㛇燉濼陎 "DUJWJUZ" "DUJWJUZ"#ח獳⹛ׅ㜥さ "DUJWJUZ# &YJU5SBOTJUJPO 4IBSFE&MFNFOU&YJU5SBOTJUJPO &OUFS5SBOTJUJPO 4IBSFE&MFNFOU&OUFS5SBOTJUJPO TUBSU"DUJWJUZ
אך鼂獳דאך5SBOTJUJPOָ饥 "1*-FWFM
鸬竲䚍㹋鄲ׅח "DUJWJUZ5SBOTJUJPOך㛇燉濼陎 "DUJWJUZ" "DUJWJUZ#"ח䨱㜥さ "DUJWJUZ# 3FFOUFS5SBOTJUJPO 4IBSFE&MFNFOU3FFOUFS5SBOTJUJPO 3FUVSO5SBOTJUJPO 4IBSFE&MFNFOU3FUVSO5SBOTJUJPO 䨱نةٝ
אך鼂獳דⴽךאך5SBOTJUJPOָ饥 "1*-FWFM
5SBOTJUJPOךرغحؚ ➙וך5SBOTJUJPOָ⹛ְגְֽ ̔Ⰻגך5SBOTJUJPOװ8JOEPX"OJNBUJPO ⳿⸂ׅ ؟ٝفٕ،فٔךًصُ٦ַ ˑ%FCVH˒ד剣⸬⻉דֹתׅ
5SBOTJUJPOךرغحؚ ˖ ،صً٦ءָّٝ傍ֻג ״ֻⴓַזְ ̔涪罏ぢֽؔفءّٝד "OJNBUPSⱄ欰儗أ؛٦ٕ㢌刿ׅ
5SBOTJUJPOךرغحؚˏ ˖ OJDLCVUDIFS"OJNBUPS%VSBUJPO5JMF ˖ $VTUPN2VJDL4FUUJOHTד "OJNBUPSⱄ欰儗أ؛٦ٕ 㢌刿דֹկץկ
5SBOTJUJPOךرغحؚ <transitionSet> <targets> <target android:targetId="@id/image" /> </targets> <transition class="**.BlinkDebugTransition" />
</transitionSet> ˖ 7JFXָ5SBOTJUJPOך㼎韋חזגְ ךַ״ֻⴓַזְ ̔#MJOL%FCVH5SBOTJUJPOؙٓأ ⡲ךדד5SBOTJUJPOָ ⹛ְגְַ然钠׃גה葺ְ
5SBOTJUJPOָ ֲתֻ⹛ַזְהֹךثؑحؙٔأز ˖ UIFNFךXJOEPX"DUJWJUZ5SBOTJUJPOTָ剣⸬חזגְ "QQ$PNQBU5IFNFזו鋵ךذ٦وָ5IFNF.BUFSJBMח זגְל㉏겗ז׃ ˖ *NBHF7JFXךTDBMF5ZQFְׄג ְׄגְהֹ
כDIBOHF*NBHF5SBOTGPSNךUSBOTJUJPOָ֮הֲתְֻֻ ַ ˖ 7JFXך胜兝חׯה葿אְגְ <item name="android:windowContentTransitions">true</item>
5SBOTJUJPOָ ֲתֻ⹛ַזְהֹךثؑحؙٔأز ˖ 3FDZDMFS7JFXך"EBQUFSךٗ٦سװ歗⫷ך铣鴥ד ٖ؎،ؐز䖉גַ5SBOTJUJPO㨣ְׇׁ ˖ "DUJWJUZ$PNQBUQPTUQPOF&OUFS5SBOTJUJPO BDUJWJUZ ד5SBOTJUJPOך㨣䖉א
˖ "DUJWJUZ$PNQBUTUBSU1PTUQPOFE&OUFS5SBOTJUJPO BDUJWJUZ ד㨣 7JFX5SFF0CTFSWFS0O1SF%SBX-JTUFOFSה穈さׇ
5SBOTJUJPOָ ֲתֻ⹛ַזְהֹךثؑحؙٔأز ˖ 4IBSFE&MFNFOU5SBOTJUJPOך㜥さח7JTJCJMJUZ 竰䪫׃גְזְ5SBOTJUJPOחזגְ 'BEFؙٓأָ⹛ַזְ ✳鹈䝢 ˖ 4IBSFדזְ8JOEPX5SBOTJUJPOך㜥さח7JTJCJMJUZַ
5SBOTJUJPO4FU竰䪫׃5SBOTJUJPOחזגְ ˖ ̔խ⯓玎铡僇׃#MJOL%FCVH5SBOTJUJPOװ ך7JTJCJMJUZ竰䪫׃غ٦آّٝך #MJOL7JTJCJMJUZ%FCVH5SBOTJUJPO⢪גرغحؚ׃גג ְֻׁ 醱꧟זךדծ؟ٝفٕ،فٔד ת㸣樴חכ⹛ְגֶ׆姻湫穠圓㣐㢌
ؖ؎سٓ؎ٝⰻך铡僇ׅ鿇ⴓ ˖ وذٔ،ٕرؠ؎ٝ ˖ 넝䏝הءٍسؐ ˖ ٌ٦ءّٝ ˖ 竰竲儗ה؎٦آؚٝ ˖
麊⹛ ˖ ؝ؚٖؔٓؿ؍ ˖ ػة٦ٝ ˖ 歗⫷ך铣鴥 ˖ 歗鼂獳
歗⫷ך铣鴥 ˖ فؚٖٗحءـؿ؍٦س؎ٝ ְְַֿؿؑ٦س؎ٝ ˖ ⱖ溪ך植⫷Ⳣ椚⚥ךفٔٝة ְחז ˖ ،صً٦ءّٝך劍כ歗⫷铣 鴥ך㜥さ
ꞿחׅ
歗⫷ך铣鴥 "1*-FWFM *NBHF7JFXTFU$PMPS'JMUFS⢪ֲ $PMPS'JMUFSחכTFU4BUVSBUJPO ًاحسָ֮ךדծ ،صً٦ءّٝךؿٖ٦ي׀החㄎן⳿ׅ final ObservableColorMatrix cm =
new ObservableColorMatrix(); ObjectAnimator saturation = ObjectAnimator.ofFloat(cm, ObservableColorMatrix.SATURATION, 0f, 1f); saturation.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator valueAnimator) { imageView.setColorFilter(new ColorMatrixColorFilter(cm)); } }); 1MBJEך؝٦س״ ؟ٝفٕⰻ"OJNBUPS6UJMTKBWB
ؖ؎سٓ؎ٝⰻך铡僇ׅ鿇ⴓ ˖ وذٔ،ٕرؠ؎ٝ ˖ 넝䏝הءٍسؐ ˖ ٌ٦ءّٝ ˖ 竰竲儗ה؎٦آؚٝ ˖
麊⹛ ˖ ؝ؚٖؔٓؿ؍ ˖ ػة٦ٝ ˖ 歗⫷ך铣鴥 ˖ 歗鼂獳
歗鼂獳 ˖ وذٔ،ٕرؠ؎ٝדכ넝䏝 㢌ִֿהח״ג 鋵銲稆ַ㶨銲稆חؿؓ٦ؕأך 㢌⻉爙ׅ ˖ وذٔ،ٌٕ٦ءّٝ刼简ⵃ欽 ׅ 䕦ָ慬ֻז
歗鼂獳 "1*-FWFM ˖ ؕأةي5SBOTJUJPOⰻד&MFWBUJPO 0CKFDU"OJNBUPSד㢌⻉ׇׁג֮־ל0, @Override public Animator createAnimator(ViewGroup sceneRoot,
TransitionValues startValues, TransitionValues endValues) { return ObjectAnimator.ofFloat(endValues.view, View.TRANSLATION_Z, initialElevation, finalElevation); } ؟ٝفٕⰻ-JGU05SBOTJUJPOKBWB 1MBJEך؝٦س״
ؖ؎سٓ؎ٝⰻך铡僇ׅ鿇ⴓ Ⰻ鿇鋅ת׃ ˖ وذٔ،ٕرؠ؎ٝ ˖ 넝䏝הءٍسؐ ˖ ٌ٦ءّٝ ˖ 竰竲儗ה؎٦آؚٝ
˖ 麊⹛ ˖ ؝ؚٖؔٓؿ؍ ˖ ػة٦ٝ ˖ 歗⫷ך铣鴥 ˖ 歗鼂獳
"OESPJE劢弫ך畭劣פך㼎䘔 ˖ "OESPJE"1*-FWFM ˖ "OESPJEךتحءُن٦سח״ה ךِ٦ؠ٦ָ"OESPJE⟃♳ ˖ 갫锃ח㟓ִגְ %BUBDPMMFDUFEEVSJOHBEBZQFSJPEFOEJOHPO'FCSVBSZ
%BTICPBSETIUUQTEFWFMPQFSBOESPJEDPNBCPVUEBTICPBSETJOEFYIUNM 植㖈ך朐屣
"OESPJE劢弫ך畭劣פך㼎䘔 ˖ "OESPJE劢弫ךِ٦ؠ٦דכ ،صً٦ءׇׁّٝזְ ˖ ؟٦سػ٦ذ؍ך ♴⡘✼䳔ٓ؎ـٓٔⵃ欽ׅ ˖ "OESPJE劢弫镘
"OESPJE劢弫镘 ˖ 嚊銲 ˖ NJO4EL7FSTJPOחׅ ˖ "OESPJE劢弫דכ؎ٝأز٦ٕדֹזֻׅ ˖ ًٔحز ˖
㹋鄲׃װֻׅז ˖ رًٔحز ˖ זחِ٦ؠ٦ָ㽿 㛇劤涸ח植朐דכַזꨇ׃ְ
"OESPJE劢弫ךِ٦ؠ٦דכ ،صً٦ءׇׁّٝזְ ˖ 嚊銲 ˖ "OESPJEךغ٦آّٝח״גJG俑זודⴓ䀄ׇׁ ˖ 4VQQPSU-JCSBSZזודדֹל⢪ֲ ˖ ًٔحز
˖ זח㹋鄲؝أزכ넝ֻזְ ˖ رًٔحز ˖ ♧鿇ךِ٦ؠ٦דכ⡤꿀ָ殯ז 㧅䔲זٓ؎ַٝ
؟٦سػ٦ذ؍ך ♴⡘✼䳔ٓ؎ـٓٔⵃ欽ׅ ˖ 嚊銲 ˖ ؟٦سػ٦ذ؍ךٓ؎ـٓٔ⢪ֲ ˖ ًٔحز ˖ Ⰻגךِ٦ؠ٦ד،صً٦ءّٝ〳腉
˖ رًٔحز ˖ 稢ְַ⹛ָֹ殯זծزٓـٕחזծ ך㜥さח儗《ג׃תֲֿהָ֮ غٓٝأ葺ֻ《Ⰵגְֻה葺ֲׁ
תה ˖ ،صً٦ءّٝכꅾ銲דׅ ˖ ؖ؎سٓ؎ٝה㹋鄲鋅גְֹת׃ ˖ ؟ٝفٕ،فٔך؝٦س鋅גגְֻׁ ˖ 4IBSFE&MFNFOU5SBOTJUJPOח״㹋鄲ָ㢳ְדׅ ˖
عوוָֿ㢳ְדָׅծثٍٖٝآ׃גגְֻׁ ˖ "OESPJE劢弫ך㼎䘔חאְגכծ搀椚׃גⰋגך04ד ⹛ַׁזֻג葺ְַ׃תׇ ˖ وذٔ،ٕرؠ؎ٝך،صً٦ءّٝכדֹתׅ ˖ NBUFSJBMFMFNFOU IUUQHJUJPFMFNFOU (JU)VCד 4UBS׃גְֻׁ
5IBOLT ˖ %FTJHOFSTPSBTIJO IUUQTHJUIVCDPNTPSBTIJO ˖ 1MBJE IUUQTHJUIVCDPNOJDLCVUDIFSQMBJE ˖ "OESPJE0QFO4PVSDF1SPKFDU IUUQTTPVSDFBOESPJEDPNTPVSDFMJDFOTFTIUNM
˖ %SPJE,BJHJPDJBM"OESPJEBQQ IUUQTHJUIVCDPN%SPJE,BJHJDPOGFSFODFBQQ