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
0
830
ScrollViewで 読了計測した話
2018/12/11 Otemachi.apk
ogapants
December 11, 2018
Tweet
Share
More Decks by ogapants
See All by ogapants
5分でわかるWebView+ViewGroupを実現するAOSPメールアプリの内部実装と ニュースアプリへの応用 / Otemachi.apk02
ogapants
0
730
WebView+ViewGroupを実現するAOSPメールアプリの内部実装とニュースアプリへの応用 / DroidKaigi2019
ogapants
3
3.6k
「AndroidはiOSと同じデザインで!」と言われたときのTips
ogapants
17
8.4k
たのしいAndroidかいはつ
ogapants
0
160
Fabric Digitsで始めるSMS認証
ogapants
1
1.2k
MediaController をカスタマイズするぞ
ogapants
0
2.7k
Other Decks in Technology
See All in Technology
Claude Codeから我々が学ぶべきこと
s4yuba
6
1.5k
AI コードレビューが面倒すぎるのでテスト駆動開発で解決しようとして読んだら、根本的に俺の勘違いだった
mutsumix
0
160
AIに全任せしないコーディングとマネジメント思考
kikuchikakeru
0
420
クマ×共生 HACKATHON - 熊対策を『特別な行動」から「生活の一部」に -
pharaohkj
0
290
みんなのSRE 〜チーム全員でのSRE活動にするための4つの取り組み〜
kakehashi
PRO
2
130
마라톤 끝의 단거리 스퍼트: 2025년의 AI
inureyes
PRO
1
650
LIFF CLIとngrokを使ったLIFF/LINEミニアプリのお手軽実機確認
diggymo
0
230
【CEDEC2025】ブランド力アップのためのコンテンツマーケティング~ゲーム会社における情報資産の活かし方~
cygames
PRO
0
230
Strands Agents & Bedrock AgentCoreを1分でおさらい
minorun365
PRO
6
220
【新卒研修資料】数理最適化 / Mathematical Optimization
brainpadpr
22
10k
少人数でも回る! DevinとPlaybookで支える運用改善
ishikawa_pro
5
2.2k
OPENLOGI Company Profile for engineer
hr01
1
37k
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.4k
Scaling GitHub
holman
461
140k
Balancing Empowerment & Direction
lara
1
520
The Cult of Friendly URLs
andyhume
79
6.5k
BBQ
matthewcrist
89
9.8k
Art, The Web, and Tiny UX
lynnandtonic
301
21k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
Stop Working from a Prison Cell
hatefulcrawdad
271
21k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
26k
Building Adaptive Systems
keathley
43
2.7k
Agile that works and the tools we love
rasmusluckow
329
21k
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ೖΕͪΌବͩΑ