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
Book Reader Implementation Notes with Android V...
Search
FUJI Goro
April 16, 2016
Technology
0
2.5k
Book Reader Implementation Notes with Android ViewPager 2016
https://github.com/gfx/TinyPdfReader
の解説です。
FUJI Goro
April 16, 2016
Tweet
Share
More Decks by FUJI Goro
See All by FUJI Goro
How to Boost Your Code with WebAssembly
gfx
2
2.9k
AssemblyScriptでライブラリコードの高速化をしてみる
gfx
5
3.1k
実践TypeScriptトークバトル
gfx
1
1.2k
歴史的経緯の説明 as code
gfx
7
2.8k
Elasticsearchによる 全文検索の実装 in Rails
gfx
6
9.5k
すばらしきGraphQLのSEKAIへようこそ
gfx
20
9.4k
マルチテナント・ウェブアプリケーションの実践
gfx
14
9.6k
How to choose the ORM on Android
gfx
1
4.3k
How Do We Get Along With Static Types
gfx
5
3.4k
Other Decks in Technology
See All in Technology
事業成長の裏側:エンジニア組織と開発生産性の進化 / 20250703 Rinto Ikenoue
shift_evolve
PRO
2
21k
Glacierだからってコストあきらめてない? / JAWS Meet Glacier Cost
taishin
1
160
Lazy application authentication with Tailscale
bluehatbrit
0
210
KiCadでPad on Viaの基板作ってみた
iotengineer22
0
300
CDKTFについてざっくり理解する!!~CloudFormationからCDKTFへ変換するツールも作ってみた~
masakiokuda
1
130
面倒な作業はAIにおまかせ。Flutter開発をスマートに効率化
ruideengineer
0
250
freeeのアクセシビリティの現在地 / freee's Current Position on Accessibility
ymrl
2
180
Enhancing SaaS Product Reliability and Release Velocity through Optimized Testing Approach
ropqa
1
230
Lufthansa ®️ USA Contact Numbers: Complete 2025 Support Guide
lufthanahelpsupport
0
190
2025 AWS Jr. Championが振り返るAWS Summit
kazukiadachi
0
110
Reach American Airlines®️ Instantly: 19 Calling Methods for Fast Support in the USA
flyamerican
1
160
Delta airlines Customer®️ USA Contact Numbers: Complete 2025 Support Guide
deltahelp
0
680
Featured
See All Featured
Adopting Sorbet at Scale
ufuk
77
9.5k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
281
13k
Done Done
chrislema
184
16k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Docker and Python
trallard
44
3.5k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.4k
Making the Leap to Tech Lead
cromwellryan
134
9.4k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
YesSQL, Process and Tooling at Scale
rocio
173
14k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
15
1.5k
Transcript
ಡॻը໘࣮ͷࣄ݅ ~ Android ViewPagerฤ ~ 2016/4/15 ిࢠॻ੶ษڧձ FUJI Goro (gfx)
ࣗݾհ
ࢀর࣮ • ͜ͷࢿྉͷࢀর࣮ҎԼʹ͋Γ·͢ • https://github.com/gfx/TinyPdfReader • ίΞϩδοΫ200ߦ͘Β͍ • DeploygateͰAPKΛ৴͍ͯ͠·͢ •
https://dply.me/xntdx6
ViewPagerجૅࣝ • AOSPͷҰ෦ (support library) • εϫΠϓͰࠨӈʹҠಈ͢ΔViewGroup • λϒҰൠɺಡॻը໘ͳͲʹ͏ •
ϖʔδͷਐΉํLTR(left-to-right)
ϑΝΠϧ#1 ϖʔδૹΓ͕ͬ͞Γ͢Δ
ϖʔδૹΓ͕͍ • ʮBookʯʢࠓճPDFʣ͔Β1ϖʔδऔΓग़ ͯ͠bitmapΛੜ͢Δͷʹ100 ~ 300sec͔͔ Δ • ͯ͢UIεϨουͰॲཧ͢ΔͱɺϖʔδૹΓ Ͱʮࢦ͕Ҿ͔͔ͬΔʯײ͕͢͡Δ
ViewPagerͷ࣮ • ViewPagerɺʮݱࡏͷϖʔδʯͱʮલޙͷ ϖʔδʯͷ3ϖʔδͷviewΛߏங͢Δ • ʮ࣍ͷϖʔδʯʹҠಈ͢Δલʹͦͷ࣍ͷϖʔ δͷviewΛߏங͢ΔͷͰɺͦ͜ͰඦϛϦ͔ ͔ΔͱʮϖʔδૹΓ͕٧·ΔʯΑ͏ʹײ͡Δ
#1 ͷղܾ • ViewPagerʹҰ୴ۭͷviewΛ͠ɺbitmapੜ όοΫάϥϯυεϨουͰߦ͏ • bitmap͕ੜͰ͖ͨΒviewʹͯ͠ඳը͢ Δɺ͜ͷͱ͖alphaʢಁ໌ʣͰΞχϝʔ γϣϯͯ͠ʮ;Θͬͱʯදࣔ͞ΕΔΑ͏ʹ͢ Δͱࢹ֮తʹ༏ͯ͘͠Α͍
PdfPagerAdapter: 1ทͷॲཧ ϓϨʔεϗϧμ7JFXΛͭ͘Δ ඇಉظͰCJUNBQΛϩʔυ͢Δ ݟ։͖࣌ϖʔδϩʔυ
RenderBitmapTask: bitmapੜ ݟ։͖ରԠͷͨΊͪΐͬͱෳࡶ جຊ1EG3FOEFSFSSFOEFS ΛݺͿ͚ͩ
RenderBitmapTask ϑϨʔϜ͔ͭͬͯ;Θͬͱग़ݱͤ͞Δ
Ͳ͜·Ͱ࠷దԽ͖͔͢ • 3ϖʔδ (දࣔϖʔδ+લޙϖʔδʣͷʮ४උʯ͕1ϑ ϨʔϜ(16ms)ҎԼͳΒेߴ • 1ϑϨʔϜҎԼͰͷ࠷దԽઅిޮՌ͘Β͍ • bitmapੜ30msͱ300msͰUXʹͦΕ΄Ͳҧ͍ͳ͍ •
500msΛ͑ΔΑ͏ͳΒ࠷దԽ͖͚ͩ͢ͲɺͦΕҎ Լʹ͢Δྗ͋·Γҙຯ͕ͳ͍
File #2 طಡཧ͍ͨ͠
طಡཧ • ΞϓϦͷॻ੶͝ͱʹɺͲ͜·ͰಡΜ͔ͩه ͍ͨ͠ • ViewPager#getCurrentItem() ͰҐஔΛऔಘ • 1ը໘1ϖʔδͷ࣌؆୯ɺ1ը໘2ϖʔ δʢݟ։͖ʣͷͱ͖
• ʮॻ੶σʔλͰͷҐஔʯʹม͢Δඞཁ͕͋Δ
ʮҐஔʯʹؔ͢Δ໋໊نଇ • ໋໊نଇΛͭ͘Βͳ͍ͱࢮ͵ • ViewPagerͷݱࡏ: position • ॻ੶σʔλͰͷҐஔ: pageIndex •
Ϧϑϩʔͷ͜ͱߟ͑ͳ͍ͷͱ͢Δ
QPSUSBJUͷͱ͖ͦͷ·· JT1PSUSBJU ͡Όͳ͍ͱ͍͚ͳ͍ͷ 7JFX1BHFSͷόάͱࢥΘΕΔ MBOETDBQF ݟ։͖ ͷͱ͖ ഒͯ͠දࢴͷΛҾ͘ ਖ਼֬ʹٯͷมΛߦ͏ 7JFX1BHFSͷҐஔ͔Βॻ੶Ґஔʹม
ॻ੶Ґஔ͔Β7JFX1BHFSͷҐஔʹม
File #3 ViewPager͕ࢥ͍௨Γʹಈ͍ ͯ͘Εͳ͍ΜͰ͢…
VPΛӈ͔ΒࠨʹҠಈͤ͞Δ • ViewPagerleft-to-rightͳͷͰɺright-to-left ͷॻ੶Λදࣔ͢Δͱ͖ʹͦͷ··͏ͱࢮ͵ • …ͷͰRVPͱ͍͏ϥΠϒϥϦΛ࡞ͬͨ • https://github.com/gfx/ReversibleViewPager • rvp.setReversed(true)
͢Δ͚ͩʂ
ViewPagerͰϐϯνΠϯɾΞτ͢ ΔͱIllegalArgumentException • ViewPagerͷόάͬΆ͍ • https://code.google.com/p/android/issues/detail?id=64553 • ViewPager Λܧঝͯ͠ super.onInterceptTouchEvent()
ͷྫ֎ΛѲΓ௵ ͤʂ • RVP͜ͷରԠ͕ೖ͍ͬͯΔ
VP#onSavedInstanceState() • ը໘ճస࣌ʹঢ়ଶΛอଘ͢Δ࣌ʹݺΕΔ • configuration͔ΒͱΕΔorientation͕ʮݱࡏͷ σόΠεͷํʯͰͳ͘ʮ͜Ε͔Β͔͏ํʯ ʹͳΔ • ͦ͜Ͱલड़ͷ !isPortrait()
ʹͳͬͨ • ͜Εਖ਼͍͠ͷ͔…ಈ͍ͯΔ͚Ͳ…
VP#onCreateView()ͱঢ়ଶ෮ؼ • onSavedInstanceState()Ͱอଘͨ͠ঢ়ଶΛ෮ؼͤ͞Δ • ͔͠͠ɺonCreateView()Ͱ vp.setCurrentItem() ͯ͠ແ ࢹ͞ΕΔʂʂʂ • onCreateView()ͷ͋ͱʹFragment͕view
(VPؚΉ) ͷঢ় ଶΛ෮ؼ͢Δ͔ΒɺΒ͍͠ • onCreateView()Ͱঢ়ଶΛಡΈͩ͠ɺonResume()Ͱ vp.setCurrentItem()͢Δ͜ͱʹͨ͠
RVPͷ՝ • RVPΛᘳʹ࣮͢Δͷ͕͍͠ • v1.0.2࣌Ͱ PagerTitleStrip ͱͷڠௐ͕͏ ·͍͔͘ͳ͍όά͕͋Δ • RTLAOSPଆͰରԠͯ͘͠ΕΔͱخ͍͠
• ໘ͳ͜ͱGoogleͷΤϯδχΞʹ͍ͤͨ
That's all.
https://github.com/gfx/ TinyPdfReader