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
850
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
740
WebView+ViewGroupを実現するAOSPメールアプリの内部実装とニュースアプリへの応用 / DroidKaigi2019
ogapants
3
3.7k
「AndroidはiOSと同じデザインで!」と言われたときのTips
ogapants
17
8.5k
たのしいAndroidかいはつ
ogapants
0
160
Fabric Digitsで始めるSMS認証
ogapants
1
1.2k
MediaController をカスタマイズするぞ
ogapants
0
2.8k
Other Decks in Technology
See All in Technology
半年で、AIゼロ知識から AI中心開発組織の変革担当に至るまで
rfdnxbro
0
150
ActiveJobUpdates
igaiga
1
330
Oracle Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
1
770
NIKKEI Tech Talk #41: セキュア・バイ・デザインからクラウド管理を考える
sekido
PRO
0
230
Next.js 16の新機能 Cache Components について
sutetotanuki
0
190
フィッシュボウルのやり方 / How to do a fishbowl
pauli
2
400
ソフトウェアエンジニアとAIエンジニアの役割分担についてのある事例
kworkdev
PRO
0
300
AWSの新機能をフル活用した「re:Inventエージェント」開発秘話
minorun365
2
480
[2025-12-12]あの日僕が見た胡蝶の夢 〜人の夢は終わらねェ AIによるパフォーマンスチューニングのすゝめ〜
tosite
0
200
2025年の医用画像AI/AI×medical_imaging_in_2025_generated_by_AI
tdys13
0
140
投資戦略を量産せよ 2 - マケデコセミナー(2025/12/26)
gamella
0
470
ESXi のAIOps だ!2025冬
unnowataru
0
400
Featured
See All Featured
Ethics towards AI in product and experience design
skipperchong
1
140
RailsConf 2023
tenderlove
30
1.3k
What's in a price? How to price your products and services
michaelherold
246
13k
Between Models and Reality
mayunak
0
150
Public Speaking Without Barfing On Your Shoes - THAT 2023
reverentgeek
1
280
Mobile First: as difficult as doing things right
swwweet
225
10k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
24k
[SF Ruby Conf 2025] Rails X
palkan
0
640
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
94
How to Ace a Technical Interview
jacobian
281
24k
Building AI with AI
inesmontani
PRO
1
580
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.4k
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ೖΕͪΌବͩΑ