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
ScrollViewで 読了計測した話
Search
ogapants
December 11, 2018
Technology
880
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
ScrollViewで 読了計測した話
2018/12/11 Otemachi.apk
ogapants
December 11, 2018
More Decks by ogapants
See All by ogapants
5分でわかるWebView+ViewGroupを実現するAOSPメールアプリの内部実装と ニュースアプリへの応用 / Otemachi.apk02
ogapants
0
780
WebView+ViewGroupを実現するAOSPメールアプリの内部実装とニュースアプリへの応用 / DroidKaigi2019
ogapants
3
3.9k
「AndroidはiOSと同じデザインで!」と言われたときのTips
ogapants
17
8.5k
たのしいAndroidかいはつ
ogapants
0
190
Fabric Digitsで始めるSMS認証
ogapants
1
1.3k
MediaController をカスタマイズするぞ
ogapants
0
2.8k
Other Decks in Technology
See All in Technology
ガバナンスの「ちょうどいい落とし所」を探れ!開発スピードを妨げない運用判断の勘所 / SRE NEXT 2026
genda
1
260
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
1
280
Making sense of Google’s agentic dev tools
glaforge
1
280
ゴールデンパスは敷いただけでは道にならない ─ 企画部門のエンジニアが技術標準を事業価値に変えるまで
mhrtech
1
230
SRE依存からの脱却 運用を開 発チームへ移す、 フルサイ クル開 発体制の実践
joooee0000
0
3.2k
AIレビューはどこまで任せられるのか?自動化と人が背負うレビューの境界
sansantech
PRO
3
1.1k
Data + AI Summit 2026 イベントレポート: 「AIがビジネスで意思決定するデータ基盤」へ
nek0128
0
280
Gen3R: 3D Scene Generation Meets Feed-Forward Reconstruction
spatial_ai_network
0
130
公式ドキュメントの歩き方etc
coco_se
1
120
ZOZOTOWNの進化と信頼性を両立する負荷試験
zozotech
PRO
2
260
AI x 開発生産性を取り巻く予算戦略と投資対効果
i35_267
1
130
「AIに依存している」と 「AIを使いこなしている」の違い
k8yasuma
0
120
Featured
See All Featured
The Pragmatic Product Professional
lauravandoore
37
7.4k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
220
WCS-LA-2024
lcolladotor
0
720
Design of three-dimensional binary manipulators for pick-and-place task avoiding obstacles (IECON2024)
konakalab
0
490
Designing for humans not robots
tammielis
254
26k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
370
The innovator’s Mindset - Leading Through an Era of Exponential Change - McGill University 2025
jdejongh
PRO
1
220
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.4k
How to Talk to Developers About Accessibility
jct
2
400
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.8k
Transcript
ScrollViewͰ ಡྃܭଌͨ͠ 2018/12/11 Otemachi.apk @ogapants
ࣗݾհ • ͓͕ͺΜ@ogapants • ೖࣾ • ٕज़ॻయͰνʔϜվળͱ AndroidStudioͷTipsʹ͍ͭͯॻ͍ͨ noteͰങ͑ΔΑʂ https://goo.gl/AWv7v1
ScrollViewͰ ಡྃܭଌͨ͠
ʮಡྃʯͱ • શͯಡΈऴ͑Δ͜ͱ • ΞϓϦͰ͍͏ͱը໘ͷҙͷॴ·ͰεΫ ϩʔϧ͠ऴΘΔ͜ͱ
ฐࣾʹ͓͚Δಡྃܭଌͱ • ୭͕ • ͲͷهࣄΛ • Ͳ͔͜Β • Ͳ͜·Ͱ •
ͲΕ͘Β͍ͷ࣌ؒͰ • ಡΜ͔ͩʢεΫϩʔϧ͔ͨ͠ʣ Λܭଌͯ͠αʔόʔʹૹΓɺσʔλνʔϜ͕ੳ
ಡྃܭଌͱ • ༨ஊɿૹΓઌࣾͷܭଌج൫ʮAtlasʯ
ԿΛͨ͠ͷ͔
ͳͥͨ͠ͷ͔ • ϢʔβʔʹΑΓଟ͘هࣄΛಡΜͰ΄͍͠ ˠBը໘Λ࡞Γ͍ͨ ˠطଘͷAը໘ͱൺͯͲ͏͔ςετ͍ͨ͠ ˠPV͚ͩͩͱਅ৽͠͞ͰݟΒΕ͍ͯΔՄೳੑ ˠܧଓతʹڵຯΛ࣋ͬͯಡΜͰ͍Δ͔Γ͍ͨ ˠΑΓϢʔβʔͷߦಈΛৄ͘͠ܭଌ͢Δඞཁ͕ ͋Δ
ԿΛͨ͠ͷ͔ • Aը໘ͱBը໘Ͱಡྃʹ͕ࠩແ͍͔ܭଌ Aը໘ Bը໘
Ͳ͏ͩͬͨͷ͔ • ݁ՌɺBը໘ظҎ্ͷಡ͕ྃ͞Εͨ • Bը໘ͷ༗༻ੑΛࣈతࠜڌΛ ࣋ͬͯΞϐʔϧͰ͖ͨ • ۙϦϦʔε༧ఆʂ
ΞϓϦهࣄը໘ͷߏ
هࣄը໘ͷߏ ϔομʔ ʢλΠτϧͳͲʣ ίϯςϯπ (WebView) ϑολʔ ʢؔ࿈هࣄҰཡͳͲʣ ʢಡྃʹؚ·ͳ͍ʣ ScrollView Ad
هࣄը໘ͷߏ device ViewPagerͰ εϫΠϓՄೳ
ܭଌ͢Δͷ
ܭଌ͢Δͷ • ૹΔ • ૹΔλΠϛϯά
ૹΔ • هࣄ͕ඇදࣔʹͳΔ·Ͱͷ࣌ؒ(ms)ɹˠ؆୯ͳλΠϚʔΫϥεΛ ࡞ͬͨ • هࣄશମͷ͞(px)ɹˠಡྃͷॏ͞ΛΔͨΊ • هࣄදࣔ࣌ͷઌ಄(px)ɹˠ࠷ॳ͔ΒಡΈ࢝Ίͨͷ్͔த͔Βͳ ͷ͔ΔͨΊ(ޙड़) •
هࣄඇදࣔ࣌ͷඌ(px)ɹˠͲ͜·ͰಡΜͩͷ͔ΔͨΊ(ޙड़) • ಡྃ(%)ɹˠඌ/શମͷ͞
ૹΔλΠϛϯά • ը໘͕ݟ͑Δঢ়ଶ͔Βݟ͑ͳ͍ঢ়ଶʹͳͬͨ ͱ͖ • onPause࣌ or ViewPagerͷඇselect࣌Ͱ ૹΔ
Ͳ͏࣮͢Δͷ͔
ૹΔ • هࣄ͕ඇදࣔʹͳΔ·Ͱͷ࣌ؒɹˠ؆୯ͳλΠϚʔΫϥεΛ࡞ͬ ͨ • هࣄશମͷ͞ɹˠಡྃͷॏ͞ΛΔͨΊ • هࣄදࣔ࣌ͷઌ಄ɹˠ࠷ॳ͔ΒಡΈ࢝Ίͨͷ్͔த͔Βͳ ͷ͔ΔͨΊ(ޙड़) •
هࣄඇදࣔ࣌ͷඌɹˠͲ͜·ͰಡΜͩͷ͔ΔͨΊ(ޙड़) • ಡྃɹˠඌ/શମͷ͞ →View#getLocationInWindow →View#getLocalVisibleRect
Ͳ͏࣮͢Δͷ͔ • ઌ಄…View#getLocationInWindow • ඌ…View#getLocalVisibleRect • View#getScrollY →ಈతʹߴ͞ͷมΘΔϑολʔಡྃʹؚΊͳ͍ͨΊɺ ͑ͦ͏Ͱ͑ͳ͍
εΫϩʔϧྔͰͳ͘εΫϩʔϧ͞ΕͨViewͷҐஔͰஅ
View#getLocationInWindow • window্ͷViewͷࠨ্ͷ࠲ඪ(x,y)ΛྻͰऔಘ • ϔομʔΛͲ͜·Ͱ্ʹεΫϩʔϧ͔͕ͨ͠औΕΔ • yͰઌ಄Λऔಘ • val arr
= IntArray(2) view.getLocationInWindow(arr) val y = arr[1]
View#getLocationInWindow • ͍͍ͩͨͷ(x,y) (0,300) (0,1500) (0,-300) 1000x2000 ͷը໘ View x
y
View#getLocalVisibleRect • ViewͷՄࢹྖҬͷۣܗ(Rect)Λऔಘʢͪΐͬͱಛघʣ • ίϯςϯπ͕ͲΕ͘Β͍εΫϩʔϧ͞Ε͍ͯΔ͔औΕΔ • bottomͰඌΛऔಘ • val rect
= Rect() view.getLocalVisibleRect(rect) val position = rect.bottom
• ͍͍ͩͨͷ(left,top,right,bottom) View#getLocalVisibleRect (0,0,1000,400) (0,0,1000,400) (0,0,1000,200) (0,50,1000,2450) 1000x2000 ͷը໘ View
- - - - - - - - - - -
• ͍͍ͩͨͷ(left,top,right,bottom) View#getLocalVisibleRect (0,0,1000,400) (0,0,1000,400) (0,200,1000,400) (0,-450,1000,-50) 1000x2000 ͷը໘ View
- - - - - - - - - - -
εΫϩʔϧͷύλʔϯ
εΫϩʔϧঢ়ଶͷύλʔϯग़͠
ॳظঢ়ଶ
εΫϩʔϧঢ়ଶ1
εΫϩʔϧঢ়ଶ2
εΫϩʔϧঢ়ଶ3
εΫϩʔϧঢ়ଶ4
εΫϩʔϧঢ়ଶͷύλʔϯग़͠ • Ұݟ໘͚ͩͲެࣜΛग़ͤ؆୯
͍͞͝ʹ
FAQ • ͍ͯ͏͔ScrollViewʹWebViewೖΕ͍͍ͯͷʁ ˠͩΊͰ͢ɻby googler • ͡Ό͋͜ͷͲ͏ͳΔͷʁ ˠઈࢍॻ͖͑தͳͷͰࠓճڙཆ͞Ε·ͨ͠ • WebViewͱViewGroupΛΈ߹Θ͍ͤͨͱ͖ScrollView
Ͱғ͏Ҏ֎ରԠҊ͋Δͷʁ ˠ
DroidKaigi2019 ʮWebView+ViewGroupΛ࣮ݱ͢ΔAOSPϝʔϧ ɹΞϓϦͷ෦࣮ͱχϡʔεΞϓϦͷԠ༻ʯ ͱ͍͏λΠτϧͰ͢Αʂ
·ͱΊ • ฐ͍ࣾΖ͍Ζੳͯࠜ͠ڌ͋ΔࣈΛݩʹվ ળͯ͠ΔΑ • Viewͷදࣔঢ়ଶΛݟΔʹ getLocationInWindowgetLocalVisibleRectΛ ͏ͱ͍͍Α • ScrollViewʹWebViewೖΕͪΌବͩΑ