Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
ステートレスなLLMでステートフルなAI agentを作る - YAPC::Fukuoka 2025
gfx
7
1.6k
How to Boost Your Code with WebAssembly
gfx
2
3k
AssemblyScriptでライブラリコードの高速化をしてみる
gfx
5
3.2k
実践TypeScriptトークバトル
gfx
1
1.2k
歴史的経緯の説明 as code
gfx
7
2.9k
Elasticsearchによる 全文検索の実装 in Rails
gfx
6
9.7k
すばらしきGraphQLのSEKAIへようこそ
gfx
20
9.6k
マルチテナント・ウェブアプリケーションの実践
gfx
14
9.7k
How to choose the ORM on Android
gfx
1
4.4k
Other Decks in Technology
See All in Technology
GitHub Copilotを使いこなす 実例に学ぶAIコーディング活用術
74th
3
3k
AIと二人三脚で育てた、個人開発アプリグロース術
zozotech
PRO
1
720
エンジニアリングマネージャー はじめての目標設定と評価
halkt
0
280
Kiro Autonomous AgentとKiro Powers の紹介 / kiro-autonomous-agent-and-powers
tomoki10
0
450
寫了幾年 Code,然後呢?軟體工程師必須重新認識的 DevOps
cheng_wei_chen
1
1.4k
意外とあった SQL Server 関連アップデート + Database Savings Plans
stknohg
PRO
0
310
エンジニアリングをやめたくないので問い続ける
estie
2
1.2k
業務のトイルをバスターせよ 〜AI時代の生存戦略〜
staka121
PRO
2
130
世界最速級 memcached 互換サーバー作った
yasukata
0
340
乗りこなせAI駆動開発の波
eltociear
1
1.1k
因果AIへの招待
sshimizu2006
0
970
非CUDAの悲哀 〜Claude Code と挑んだ image to 3D “Hunyuan3D”を EVO-X2(Ryzen AI Max+395)で動作させるチャレンジ〜
hawkymisc
2
180
Featured
See All Featured
Facilitating Awesome Meetings
lara
57
6.7k
Making the Leap to Tech Lead
cromwellryan
135
9.7k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
2.7k
We Have a Design System, Now What?
morganepeng
54
7.9k
It's Worth the Effort
3n
187
29k
Mobile First: as difficult as doing things right
swwweet
225
10k
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
Designing for humans not robots
tammielis
254
26k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.6k
Typedesign – Prime Four
hannesfritz
42
2.9k
A Tale of Four Properties
chriscoyier
162
23k
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