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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
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
2
720
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.3k
Androidアプリで安定して動作させ継続的に開発するために設計の原則を利用して開発した話
takahirom
3
1.5k
Android Tools & Performance
takahirom
1
1.2k
Jetpack Compose State Practices
takahirom
1
1.5k
Inside Jetpack Compose
takahirom
1
1.1k
Other Decks in Programming
See All in Programming
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
370
そこに3びきプロダクトがいるじゃろう——生成AI時代における“価値が届かない理由”の構造
kosuket
0
130
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.6k
PHP Application における Kubernetes 内 gRPC 通信
ganchiku
0
540
【SRE NEXT 2026 Lunch Session】一人目専任SREの立ち上げを加速する ― AIと進めたオンボーディングで2分を0.04秒にした話
pkshadeck
PRO
0
3.1k
今さら聞けない .NET CLI
htkym
0
140
yield再入門 #phpcon
o0h
PRO
0
760
これからAgentCoreを触る方へトレンドはGatewayです
har1101
6
510
ルールを書いて終わらせないハーネスエンジニアリング
yug1224
4
1.8k
Prismを使った型安全な暗号化_関数型まつり2026
_fhhmm
0
150
信頼性について考えてみる(SRE NEXT 2026 miniLT)
hayama17
0
210
PHP初心者セッション2026 〜生成AIでは見えない裏側を知る:今だからLAMPを通して仕組みを学ぶ〜
kashioka
0
680
Featured
See All Featured
AI: The stuff that nobody shows you
jnunemaker
PRO
9
840
Six Lessons from altMBA
skipperchong
29
4.4k
Marketing to machines
jonoalderson
1
5.6k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
640
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Color Theory Basics | Prateek | Gurzu
gurzu
0
400
Art, The Web, and Tiny UX
lynnandtonic
304
22k
It's Worth the Effort
3n
188
29k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
190
Ruling the World: When Life Gets Gamed
codingconduct
0
290
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
330
Making the Leap to Tech Lead
cromwellryan
135
10k
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