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
Epoxyを用いたレイアウト構築術
Search
kobaken
August 27, 2019
Programming
250
1
Share
Epoxyを用いたレイアウト構築術
8/27(火)に開催された pixiv App Night(ゲスト: Bitrise) での発表資料です
kobaken
August 27, 2019
More Decks by kobaken
See All by kobaken
複数行のTextで中間省略(…)を実現する
kobaken0029
0
46
Jetpack Compose Preview実践ガイド
kobaken0029
0
110
Serializable / Parcelableとの上手な付き合い方
kobaken0029
0
100
Kotlinの好きなところ
kobaken0029
0
1.3k
Compose駆動開発のためのマルチモジュール化
kobaken0029
0
250
DataStoreを導入してみた
kobaken0029
1
360
Androidエンジニアが1週間でiOSアプリ開発を学び、1ヶ月で大規模アプリ開発にJOINした話
kobaken0029
0
3.6k
Modern REST Communicate for Android
kobaken0029
0
1.6k
AndroidでモダンREST通信してみたった
kobaken0029
0
270
Other Decks in Programming
See All in Programming
存在論的プログラミング: 時間と存在を記述する
koriym
5
860
Redox OS でのネームスペース管理と chroot の実現
isanethen
0
570
How Swift's Type System Guides AI Agents
koher
0
220
へんな働き方
yusukebe
6
2.9k
Kubernetes上でAgentを動かすための最新動向と押さえるべき概念まとめ
sotamaki0421
3
480
Go_College_最終発表資料__外部公開用_.pdf
xe_pc23
0
180
YJITとZJITにはイカなる違いがあるのか?
nakiym
0
200
Don't Prompt Harder, Structure Better
kitasuke
0
690
Rethinking API Platform Filters
vinceamstoutz
0
11k
Symfonyの特性(設計思想)を手軽に活かす特性(trait)
ickx
0
130
TiDBのアーキテクチャから学ぶ分散システム入門 〜MySQL互換のNewSQLは何を解決するのか〜 / tidb-architecture-study
dznbk
1
160
KagglerがMixSeekを触ってみた
morim
0
370
Featured
See All Featured
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
97
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.4k
How Software Deployment tools have changed in the past 20 years
geshan
0
33k
Thoughts on Productivity
jonyablonski
76
5.1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
170
How GitHub (no longer) Works
holman
316
150k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
9.9k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Joys of Absence: A Defence of Solitary Play
codingconduct
1
340
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
0
270
Transcript
EpoxyΛ༻͍ͨϨΠΞτߏஙज़ pixiv.inc kobaken
kobaken ϐΫγϒגࣜձࣾ AndroidΞϓϦΤϯδχΞ Kotlin / Swift / Ruby
༏ / εϚϒϥ / ϙέΧ Twitter: @koba_dog_ GitHub: @kobaken0029
ɾEpoxyͬͯԿʁ ɾྨࣅϥΠϒϥϦʁ ɾEpoxyΛ͏ͱͲ͏ศརʹͳΔʁ ɾpixiv Sketch AndroidͰͷ׆༻ࣄྫ Index
EpoxyͬͯԿʁ
EpoxyͬͯԿʁ RecyclerView(ϦετάϦουදࣔʹ͏)ʹΑΔෳࡶͳϨΠΞτΛએݴతʹ ߏஙग़དྷΔAndroidϥΠϒϥϦɻAirbnbɻ https://github.com/airbnb/epoxy
ྨࣅϥΠϒϥϦʁ
ྨࣅϥΠϒϥϦʁ RecyclerViewΛ͍͍ײ͡ʹ͢Δܥ ɾGroupie એݴతʹUIΛΈཱͯΒΕΔܥ ɾKotlin/anko ɾJetpack Compose ɾsquare/contour←NEW!
એݴతʹUIΛΈཱͯΒΕΔܥ ɾSwiftUI
Ͱɺ࣮ࡍͲ͏ศརʹͳΔͷʁʁʁ
EpoxyΛ͏ͱͲ͏ศརʹͳΔʁ ɾAdapterΛॻ͔ͳ͍͍ͯ͘ʂˡ͜Ε͖͢ ɾࠩཧΛࣗಈͰͬͯ͘ΕΔʂˡ͜Ε͖͢ ɾData Binding ʹରԠ ɾศརͳΞυΦϯ͕ͨ͘͞Μʂ
EpoxyΛ͏ͱͲ͏ศརʹͳΔʁ ɾAdapterΛॻ͔ͳ͍͍ͯ͘ʂˡ͜Ε͖͢ ɾࠩཧΛࣗಈͰͬͯ͘ΕΔʂˡ͜Ε͖͢ ɾData Binding ʹରԠ ɾศརͳΞυΦϯ͕ͨ͘͞Μʂ
Adapter
%BUB4PVSDF -JTU "EBQUFS -JTU7JFX
σʔλ͕ViewʹΘΔ Α͏ʹ͍͍ײ͡ʹม ͯ͘͠ΕΔౕ
Ϧετදࣔ͢ΔͨΊͷ࠷খίʔυ
Ϧετදࣔ͢ΔͨΊͷ࠷খίʔυ
CustomAdapterͷ࣮
RecyclerView.Adapter with ViewTypeͷ࣮
&QPYZ͍ͬͯ͏ͷ͕͋ΔΑʂ ͔ΜͨΜͩΑʂ ΈΜͳͬͯΔΑʂ
Epoxyͩͱ͜͏
EpoxyΛ͏ͱͲ͏ศརʹͳΔʁ ɾAdapterΛॻ͔ͳ͍͍ͯ͘ʂˡ͜Ε͖͢ ɾࠩཧΛࣗಈͰͬͯ͘ΕΔʂˡ͜Ε͖͢ ɾData Binding ʹରԠ ɾศརͳΞυΦϯ͕ͨ͘͞Μʂ
EpoxyΛ͏ͱͲ͏ศརʹͳΔʁ ɾAdapterΛॻ͔ͳ͍͍ͯ͘ʂˡ͜Ε͖͢ ɾࠩཧΛࣗಈͰͬͯ͘ΕΔʂˡ͜Ε͖͢ ɾData Binding ʹରԠ ɾศརͳΞυΦϯ͕ͨ͘͞Μʂ
ࠩཧ ɾEpoxyController͕ࣗಈͰࠩΛऔͬͯ͘ΕΔ ɾͦ͜Ͱੜ͢ΔEpoxyModelͷequalshashCodeΛࢀর͍ͯ͠Δ ɾࠩߋ৽ΞϧΰϦζϜʹDiffUtilΛ࠾༻ ɾhttps://github.com/airbnb/epoxy/wiki/Diffing
EpoxyΛ͏ͱͲ͏ศརʹͳΔʁ ɾAdapterΛॻ͔ͳ͍͍ͯ͘ʂˡ͜Ε͖͢ ɾࠩཧΛࣗಈͰͬͯ͘ΕΔʂˡ͜Ε͖͢ ɾData Binding ʹରԠ ɾศརͳΞυΦϯ͕ͨ͘͞Μʂ
EpoxyΛ͏ͱͲ͏ศརʹͳΔʁ ɾAdapterΛॻ͔ͳ͍͍ͯ͘ʂˡ͜Ε͖͢ ɾࠩཧΛࣗಈͰͬͯ͘ΕΔʂˡ͜Ε͖͢ ɾData Binding ʹରԠ ɾศརͳΞυΦϯ͕ͨ͘͞Μʂ
EpoxyModelͱ EpoxyEpoxyModelΛհͯ͠ViewʹDataΛόΠϯυ͍ͯ͠Δ EpoxyModelࣗಈੜ͞ΕΔ EpoxyModelΛੜ͢Δํ๏3ͭ ɾCustomViewʹରͯ͠ΞϊςʔγϣϯΛ༩͢Δ ɾEpoxyModelWithHolderΛܧঝͯ͠ΞϊςʔγϣϯΛ༩͢Δ ɾpackage-info.javaΛهड़ͯ͠xmlΛData BindingରԠ͢Δ
Data BindingʹରԠ ɾ֤ηϧʹؔͯ͠େମͷ߹ɺxmlͷΈͰ݁Ͱ͖Δ ɾCustomViewΛ࡞Βͳͯ͘ྑ͍ ɾࠐΈೖͬͨॲཧBindingAdapterͰΓग़͢
EpoxyΛ͏ͱͲ͏ศརʹͳΔʁ ɾAdapterΛॻ͔ͳ͍͍ͯ͘ʂˡ͜Ε͖͢ ɾࠩཧΛࣗಈͰͬͯ͘ΕΔʂˡ͜Ε͖͢ ɾData Binding ʹରԠ ɾศརͳΞυΦϯ͕ͨ͘͞Μʂ
ศརͳΞυΦϯ ɾը૾ͷPreLoading on ɾศརʹΧελϚΠζ͞ΕͨRecyclerViewΛఏڙ ɾΧϧʔηϧ࣮ ɾεϫΠϓυϥοά&υϩοϓ
pixiv Sketch AndroidͰͷ׆༻ࣄྫ
௨ը໘
௨ը໘ ɾpackage-info.java ɾlayout xml ɾdata class ɾController ɾActivity/Fragment
package-info.java
Layout xml
Layout xml
Data class
Controller (ఆٛ)
Controller (Listener)
Controller
Activity / Fragment
ଞʹ…
ɾEpoxyෳࡶͳϦετ/ίϨΫγϣϯUIΛએݴతʹ࣮ग़དྷΔ ɾ֤row/cellͷ࣮ʹूதͰ͖Δ ɾEpoxyModelͷࠩΛݟͯɺࣗಈͰࠩߋ৽ͯ͘͠ΕΔ ɾ๛ͳΞυΦϯ͕ศར ɾEpoxy͍͍ͧ ·ͱΊ
Let’s Epoxy!