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.2k
実践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
VS CodeとGitHub Copilotで爆速開発!アップデートの波に乗るおさらい会 / Rapid Development with VS Code and GitHub Copilot: Catch the Latest Wave
yamachu
3
460
SRE不在の開発チームが障害対応と 向き合った100日間 / 100 days dealing with issues without SREs
shin1988
2
2k
サイバーエージェントグループのSRE10年の歩みとAI時代の生存戦略
shotatsuge
4
1k
IPA&AWSダブル全冠が明かす、人生を変えた勉強法のすべて
iwamot
PRO
2
230
マルチプロダクト環境におけるSREの役割 / SRE NEXT 2025 lunch session
sugamasao
1
730
スタックチャン家庭用アシスタントへの道
kanekoh
0
120
AI Ready API ─ AI時代に求められるAPI設計とは?/ AI-Ready API - Designing MCP and APIs in the AI Era
yokawasa
6
1.7k
AWS CDK 入門ガイド これだけは知っておきたいヒント集
anank
5
750
united airlines ™®️ USA Contact Numbers: Complete 2025 Support Guide
flyunitedhelp
1
470
Maintainer Meetupで「生の声」を聞く ~講演だけじゃないKubeCon
logica0419
0
110
【あのMCPって、どんな処理してるの?】 AWS CDKでの開発で便利なAWS MCP Servers特集
yoshimi0227
6
950
Microsoft Defender XDRで疲弊しないためのインシデント対応
sophiakunii
1
310
Featured
See All Featured
GraphQLとの向き合い方2022年版
quramy
49
14k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
26
2.9k
VelocityConf: Rendering Performance Case Studies
addyosmani
332
24k
Designing for Performance
lara
610
69k
Embracing the Ebb and Flow
colly
86
4.8k
The Cult of Friendly URLs
andyhume
79
6.5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
50
5.5k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
44
2.4k
Building Flexible Design Systems
yeseniaperezcruz
328
39k
Automating Front-end Workflow
addyosmani
1370
200k
The Invisible Side of Design
smashingmag
301
51k
Fireside Chat
paigeccino
37
3.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