Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
How to implement material design animation droi...
Search
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
830
AndroidアプリのAI実装をAndroidifyで学ぶ ー Google公式サンプルによる体験と実装 ー
takahirom
0
150
AIエージェントによるテストフレームワーク Arbigent
takahirom
0
1.1k
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
リアルな遅延を測る仕様
kota_yata
1
130
Discordを用いたラボオートメーション関連情報収集の自動化
noguhiro2002
0
430
PostgreSQL 18で考えるUUID主キー
kazuhiro1982
0
500
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
210
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
390
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
250
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
400
「人を評価する AI」の設計と実装
ryoyanara
0
240
源内ハンズオン概要編
hideg
0
210
in-process GraphQL のすすめ #ginzajs
izumin5210
4
1.5k
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
360
Detecting Compromised CI with eBPF and Cilium Tetragon
lizrice
0
260
Featured
See All Featured
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
The SEO identity crisis: Don't let AI make you average
varn
0
540
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
35k
Building AI with AI
inesmontani
PRO
1
1.2k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
790
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
310
The SEO Collaboration Effect
kristinabergwall1
1
530
Balancing Empowerment & Direction
lara
6
1.2k
Optimizing for Happiness
mojombo
378
71k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
440
AI in Enterprises - Java and Open Source to the Rescue
ivargrimstad
0
1.4k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.4k
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