Slide 1

Slide 1 text

ScrollViewͰ
 ಡྃܭଌͨ͠࿩ 2018/12/11 Otemachi.apk @ogapants

Slide 2

Slide 2 text

ࣗݾ঺հ • ͓͕ͺΜ@ogapants • ೖࣾ൒೥ • ٕज़ॻయͰνʔϜվળͱ
 AndroidStudioͷTipsʹ͍ͭͯॻ͍ͨ
 noteͰങ͑ΔΑʂ
 https://goo.gl/AWv7v1

Slide 3

Slide 3 text

ScrollViewͰ
 ಡྃܭଌͨ͠࿩

Slide 4

Slide 4 text

ʮಡྃʯͱ͸ • શͯಡΈऴ͑Δ͜ͱ • ΞϓϦͰ͍͏ͱը໘಺ͷ೚ҙͷ৔ॴ·ͰεΫ ϩʔϧ͠ऴΘΔ͜ͱ

Slide 5

Slide 5 text

ฐࣾʹ͓͚Δಡྃܭଌͱ͸ • ୭͕ • ͲͷهࣄΛ • Ͳ͔͜Β • Ͳ͜·Ͱ • ͲΕ͘Β͍ͷ࣌ؒͰ • ಡΜ͔ͩʢεΫϩʔϧ͔ͨ͠ʣ
 
 Λܭଌͯ͠αʔόʔʹૹΓɺσʔλνʔϜ͕෼ੳ

Slide 6

Slide 6 text

ಡྃܭଌͱ͸ • ༨ஊɿૹΓઌ͸ࣾ಺ͷܭଌج൫ʮAtlasʯ

Slide 7

Slide 7 text

ԿΛͨ͠ͷ͔

Slide 8

Slide 8 text

ͳͥͨ͠ͷ͔ • ϢʔβʔʹΑΓଟ͘هࣄΛಡΜͰ΄͍͠
 ˠBը໘Λ࡞Γ͍ͨ
 ˠطଘͷAը໘ͱൺ΂ͯͲ͏͔ςετ͍ͨ͠
 ˠPV͚ͩͩͱਅ৽͠͞ͰݟΒΕ͍ͯΔՄೳੑ
 ˠܧଓతʹڵຯΛ࣋ͬͯಡΜͰ͍Δ͔஌Γ͍ͨ
 ˠΑΓϢʔβʔͷߦಈΛৄ͘͠ܭଌ͢Δඞཁ͕ ͋Δ

Slide 9

Slide 9 text

ԿΛͨ͠ͷ͔ • Aը໘ͱBը໘Ͱಡྃʹ͕ࠩແ͍͔ܭଌ Aը໘ Bը໘

Slide 10

Slide 10 text

Ͳ͏ͩͬͨͷ͔ • ݁ՌɺBը໘΋ظ଴Ҏ্ͷಡ͕ྃ͞Εͨ • Bը໘ͷ༗༻ੑΛ਺ࣈతࠜڌΛ
 ࣋ͬͯΞϐʔϧͰ͖ͨ • ۙ೔ϦϦʔε༧ఆʂ

Slide 11

Slide 11 text

ΞϓϦهࣄը໘ͷߏ੒

Slide 12

Slide 12 text

هࣄը໘ͷߏ੒ ϔομʔ
 ʢλΠτϧͳͲʣ ίϯςϯπ (WebView) ϑολʔ
 ʢؔ࿈هࣄҰཡͳͲʣ ʢಡྃʹؚ·ͳ͍ʣ ScrollView Ad

Slide 13

Slide 13 text

هࣄը໘ͷߏ੒ device ViewPagerͰ εϫΠϓՄೳ

Slide 14

Slide 14 text

ܭଌ͢Δ΋ͷ

Slide 15

Slide 15 text

ܭଌ͢Δ΋ͷ • ૹΔ஋ • ૹΔλΠϛϯά

Slide 16

Slide 16 text

ૹΔ஋ • هࣄ͕ඇදࣔʹͳΔ·Ͱͷ࣌ؒ(ms)ɹˠ؆୯ͳλΠϚʔΫϥεΛ ࡞ͬͨ • هࣄશମͷ௕͞(px)ɹˠಡྃͷॏ͞Λ஌ΔͨΊ • هࣄදࣔ࣌ͷઌ಄஍఺(px)ɹˠ࠷ॳ͔ΒಡΈ࢝Ίͨͷ్͔த͔Βͳ ͷ͔஌ΔͨΊ(ޙड़) • هࣄඇදࣔ࣌ͷ຤ඌ஍఺(px)ɹˠͲ͜·ͰಡΜͩͷ͔஌ΔͨΊ(ޙड़) • ಡྃ཰(%)ɹˠ຤ඌ஍఺/શମͷ௕͞

Slide 17

Slide 17 text

ૹΔλΠϛϯά • ը໘͕ݟ͑Δঢ়ଶ͔Βݟ͑ͳ͍ঢ়ଶʹͳͬͨ ͱ͖ • onPause࣌఺ or ViewPagerͷඇselect࣌఺Ͱ ૹΔ

Slide 18

Slide 18 text

Ͳ͏࣮૷͢Δͷ͔

Slide 19

Slide 19 text

ૹΔ஋ • هࣄ͕ඇදࣔʹͳΔ·Ͱͷ࣌ؒɹˠ؆୯ͳλΠϚʔΫϥεΛ࡞ͬ ͨ • هࣄશମͷ௕͞ɹˠಡྃͷॏ͞Λ஌ΔͨΊ • هࣄදࣔ࣌ͷઌ಄஍఺ɹˠ࠷ॳ͔ΒಡΈ࢝Ίͨͷ్͔த͔Βͳ ͷ͔஌ΔͨΊ(ޙड़) • هࣄඇදࣔ࣌ͷ຤ඌ஍఺ɹˠͲ͜·ͰಡΜͩͷ͔஌ΔͨΊ(ޙड़) • ಡྃ཰ɹˠ຤ඌ஍఺/શମͷ௕͞෼ →View#getLocationInWindow →View#getLocalVisibleRect

Slide 20

Slide 20 text

Ͳ͏࣮૷͢Δͷ͔ • ઌ಄஍఺…View#getLocationInWindow • ຤ඌ஍఺…View#getLocalVisibleRect • View#getScrollY
 →ಈతʹߴ͞ͷมΘΔϑολʔ͸ಡྃʹؚΊͳ͍ͨΊɺ ࢖͑ͦ͏Ͱ࢖͑ͳ͍
 
 εΫϩʔϧྔͰͳ͘εΫϩʔϧ͞ΕͨViewͷҐஔͰ൑அ

Slide 21

Slide 21 text

View#getLocationInWindow • window্ͷViewͷࠨ্୺ͷ࠲ඪ(x,y)Λ഑ྻͰऔಘ • ϔομʔΛͲ͜·Ͱ্ʹεΫϩʔϧ͔͕ͨ͠औΕΔ • yͰઌ಄஍఺Λऔಘ • val arr = IntArray(2) view.getLocationInWindow(arr) val y = arr[1]

Slide 22

Slide 22 text

View#getLocationInWindow • ͍͍ͩͨͷ(x,y) (0,300) (0,1500) (0,-300) 1000x2000 ͷը໘ View x y

Slide 23

Slide 23 text

View#getLocalVisibleRect • ViewͷՄࢹྖҬͷۣܗ(Rect)Λऔಘʢͪΐͬͱಛघʣ • ίϯςϯπ͕ͲΕ͘Β͍εΫϩʔϧ͞Ε͍ͯΔ͔औΕΔ • bottomͰ຤ඌ஍఺Λऔಘ • val rect = Rect() view.getLocalVisibleRect(rect) val position = rect.bottom

Slide 24

Slide 24 text

• ͍͍ͩͨͷ(left,top,right,bottom) View#getLocalVisibleRect (0,0,1000,400) (0,0,1000,400) (0,0,1000,200) (0,50,1000,2450) 1000x2000 ͷը໘ View - - - - - - - - - - -

Slide 25

Slide 25 text

• ͍͍ͩͨͷ(left,top,right,bottom) View#getLocalVisibleRect (0,0,1000,400) (0,0,1000,400) (0,200,1000,400) (0,-450,1000,-50) 1000x2000 ͷը໘ View - - - - - - - - - - -

Slide 26

Slide 26 text

εΫϩʔϧͷύλʔϯ

Slide 27

Slide 27 text

εΫϩʔϧঢ়ଶͷύλʔϯग़͠

Slide 28

Slide 28 text

ॳظঢ়ଶ

Slide 29

Slide 29 text

εΫϩʔϧঢ়ଶ1

Slide 30

Slide 30 text

εΫϩʔϧঢ়ଶ2

Slide 31

Slide 31 text

εΫϩʔϧঢ়ଶ3

Slide 32

Slide 32 text

εΫϩʔϧঢ়ଶ4

Slide 33

Slide 33 text

εΫϩʔϧঢ়ଶͷύλʔϯग़͠ • Ұݟ໘౗͚ͩͲެࣜΛग़ͤ͹؆୯

Slide 34

Slide 34 text

͍͞͝ʹ

Slide 35

Slide 35 text

FAQ • ͍ͯ͏͔ScrollViewʹWebViewೖΕ͍͍ͯͷʁ
 ˠͩΊͰ͢ɻby googler • ͡Ό͋͜ͷ࿩Ͳ͏ͳΔͷʁ
 ˠઈࢍॻ͖׵͑தͳͷͰࠓճڙཆ͞Ε·ͨ͠ • WebViewͱViewGroupΛ૊Έ߹Θ͍ͤͨͱ͖ScrollView Ͱғ͏Ҏ֎ରԠҊ͋Δͷʁ
 ˠ

Slide 36

Slide 36 text


 DroidKaigi2019 
 
 ʮWebView+ViewGroupΛ࣮ݱ͢ΔAOSPϝʔϧ
 ɹΞϓϦͷ಺෦࣮૷ͱχϡʔεΞϓϦ΁ͷԠ༻ʯ
 
 ͱ͍͏λΠτϧͰ࿩͢Αʂ

Slide 37

Slide 37 text

·ͱΊ • ฐࣾ͸͍Ζ͍Ζ෼ੳͯࠜ͠ڌ͋Δ਺ࣈΛݩʹվ ળͯ͠ΔΑ • Viewͷදࣔঢ়ଶΛݟΔʹ͸ getLocationInWindow΍getLocalVisibleRectΛ ࢖͏ͱ͍͍Α • ScrollViewʹWebViewೖΕͪΌବ໨ͩΑ