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
How to implement TimetablelLayoutManager
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Moyuru Aizawa
March 06, 2019
Programming
750
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
How to implement TimetablelLayoutManager
Moyuru Aizawa
March 06, 2019
More Decks by Moyuru Aizawa
See All by Moyuru Aizawa
BLUETOOTH_SCAN and iBeacon
lvla
1
150
graphicsLayer
lvla
0
300
BluetoothDevice.getName()に裏切られた話
lvla
0
410
Jetpack Composeで画像クロップ機能を実装する
lvla
0
1.3k
Jetpack Compose drag gesture and pinch gesture
lvla
1
4.3k
Jetpack Compose Layout API
lvla
1
710
BLEを使ったアプリを継続的に開発するために
lvla
0
1.1k
RecyclerView.ItemAnimator
lvla
1
390
RecycledViewPool
lvla
1
300
Other Decks in Programming
See All in Programming
夏だ!祭りだ!祭りとはドメインモデリングでは?
ryugen04
0
190
Android CLI
fornewid
0
210
琵琶湖の水は止められてもNet--HTTPのリトライは止められない / You might be able to stop the water flow of Lake Biwa but you can't stop Net::HTTP retries
luccafort
PRO
0
620
jsmini JavaScript Engine を作ってみた話
yosuke_furukawa
PRO
0
300
為什麼你並不需要ViewModel / No, you don't need a ViewModel
lovee
1
480
AI Engineeringは、AIプロダクトだけのものか? 〜AIがソフトウェアを作る時代の新しい当たり前〜 / No AI in your product. AI Engineering in your development.
rkaga
4
380
今さら聞けない .NET CLI
htkym
0
180
AIが無かった頃の素敵な出会いの話
codmoninc
1
390
これって Effect でできたのでは? / TSKaigi Mashup Kansai #2
susisu
0
150
2年かけて Deno に DOMMatrix を実装した話 / How I implemented DOMMatrix in Deno over two years
petamoriken
0
210
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
590
壊れたパーサから始める関数型設計と構成的なパーサ #fp_matsuri
raiga0310
2
450
Featured
See All Featured
Java REST API Framework Comparison - PWX 2021
mraible
34
9.6k
Leo the Paperboy
mayatellez
8
2.1k
How to Ace a Technical Interview
jacobian
281
24k
Believing is Seeing
oripsolob
1
180
How to build a perfect <img>
jonoalderson
1
5.9k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
480
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.7k
4 Signs Your Business is Dying
shpigford
187
22k
BBQ
matthewcrist
89
10k
First, design no harm
axbom
PRO
2
1.2k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
540
Information Architects: The Missing Link in Design Systems
soysaucechin
0
1.1k
Transcript
%SPJE,BJHJΞϓϦͷ λΠϜςʔϒϧΛࢧ͑Δٕज़ !.PZVSV"J[BXB
MoyuruAizawa Moyuru Aizawa Software engineer of CATS Div. CyberAgent Inc.
Previously at Pairs Div. Eureka Inc.
%SPJE,BJHJDPOGFSFODFBQQ
%SPJE,BJHJDPOGFSFODFBQQ
5JNFUBCMF-BZPVUBMQIB3FMFBTFE
‣ 5JNFUBCMFΛදࣔ͢ΔͨΊͷ-BZPVU.BOBHFS ‣ ࣌ࠁΛදࣔ͢ΔͨΊͷ*UFN%FDPSBUJPO ‣ ΧϥϜ໊Λදࣔ͢ΔͨΊͷ*UFN%FDPSBUJPO ‣ ݱࡏ࣌ࠁΛදࣔ͢ΔͨΊͷ7JFXPS*UFN%FDPSBUJPO ࣮༧ఆ 5JNFUBCMF-BZPVU
‣ 3FDZDMFS7JFXͱ ‣ -BZPVU.BOBHFSͱ ‣ -BZPVU.BOBHFS͕͍ͬͯΔ͜ͱ ‣ 5JNFUBCMF-BZPVU.BOBHFSͷ࣮
"HFOEB
3FDZDMFS7JFXͱ
‣ ଟྔͷΞΠςϜΛදࣔ͢Δͷʹదͨ͠7JFX(SPVQ ‣ ը໘ʹදࣔ͞ΕΔ͚ͩΞΠςϜΛඳը͢Δ ‣ ֦ுੑ͕ߴ͍ ‣ %FDPSBUJPO ‣ "OJNBUJPO
‣ ʜ 3FDZDMFS7JFXͱ
‣ "EBQUFS ‣ -BZPVU.BOBHFS ‣ *UFN%FDPSBUJPO ‣ *UFN"OJNBUPS ‣ *UFN5PVDI)FMQFS
‣ 4OBQ)FMQFS ‣ 3FDZDMFE7JFX1PPM ‣ %JGG6UJM 3FDZDMFS7JFXͱ
-BZPVU.BOBHFSͱ
‣ 3FDZDMFS7JFXͷDIJMEWJFXTͷϨΠΞτΛ୲͢ΔϞδϡʔϧ ‣ -BZPVU.BOBHFSΛม͑Δ͜ͱͰ༷ʑͳϨΠΞτΛ࣮ݱ͢Δࣄ͕Ͱ͖ Δ -BZPVU.BOBHFSͱ
-BZPVU.BOBHFSͱ -JOFBS-BZPVU.BOBHFS (SJE-BZPVU.BOBHFS 4UBHHFSFE(SJE-BZPVU.BOBHFS 'MFYCPY-BZPVU.BOBHFS
‣ ؔػೳ͕ଟ͍ͷͰ͔ͳΓେม ‣ ϨΠΞτͷෳࡶ͞Λ૿͢ཁૉ ‣ 0SJFOUBUJPO 7FSUJDBM-BZPVU)PSJ[POUBM-BZPVU ‣ 3FWFSTF-BZPVU
‣ -5335- -BZPVU.BOBHFSͷ࣮େม
‣ PO-BZPVU$IJMESFO ‣ TDSPMM7FSUJDBMMZ#ZTDSPMM)PSJ[POUBMMZ#Z ‣ TDSPMM5P ‣ TNPPUI4DSPMM5P ‣ DPNQVUF7FSUJDBM4DSPMM&YUFOUDPNQVUF)PSJ[POUBM4DSPMM&YUFOU
‣ DPNQVUF7FSUJDBM4DSPMM0GGTFUDPNQVUF)PSJ[POUBM4DSPMM0GGTFU ‣ DPNQVUF7FSUJDBM4DSPMM3BOHFDPNQVUF)PSJ[POUBM4DSPMM3BOHF ‣ *UFN1SFGFUDI ‣ *UFN%FDPSBUJPOT ‣ *UFN"OJNBUPST ‣ 1SFEJDUJWF"OJNBUJPOT ‣ ʜ -BZPVU.BOBHFSͷؔػೳ
‣ PO-BZPVU$IJMESFO ‣ TDSPMM7FSUJDBMMZ#ZTDSPMM)PSJ[POUBMMZ#Z ‣ TDSPMM5P ‣ TNPPUI4DSPMM5P ‣ DPNQVUF7FSUJDBM4DSPMM&YUFOUDPNQVUF)PSJ[POUBM4DSPMM&YUFOU
‣ DPNQVUF7FSUJDBM4DSPMM0GGTFUDPNQVUF)PSJ[POUBM4DSPMM0GGTFU ‣ DPNQVUF7FSUJDBM4DSPMM3BOHFDPNQVUF)PSJ[POUBM4DSPMM3BOHF ‣ *UFN1SFGFUDI ‣ *UFN%FDPSBUJPOT ‣ *UFN"OJNBUPST ‣ 1SFEJDUJWF"OJNBUJPOT ‣ ʜ -BZPVU.BOBHFSͷؔػೳ
‣ PO-BZPVU$IJMESFO ‣ TDSPMM7FSUJDBMMZ#ZTDSPMM)PSJ[POUBMMZ#Z ‣ TDSPMM5P ‣ TNPPUI4DSPMM5P ‣ DPNQVUF7FSUJDBM4DSPMM&YUFOUDPNQVUF)PSJ[POUBM4DSPMM&YUFOU
‣ DPNQVUF7FSUJDBM4DSPMM0GGTFUDPNQVUF)PSJ[POUBM4DSPMM0GGTFU ‣ DPNQVUF7FSUJDBM4DSPMM3BOHFDPNQVUF)PSJ[POUBM4DSPMM3BOHF ‣ *UFN1SFGFUDI ‣ *UFN%FDPSBUJPOT ‣ *UFN"OJNBUPST ‣ 1SFEJDUJWF"OJNBUJPOT ‣ ʜ -BZPVU.BOBHFSͷؔػೳ
‣ PO-BZPVU$IJMESFO ‣ TDSPMM7FSUJDBMMZ#ZTDSPMM)PSJ[POUBMMZ#Z ‣ TDSPMM5P ‣ TNPPUI4DSPMM5P ‣ DPNQVUF7FSUJDBM4DSPMM&YUFOUDPNQVUF)PSJ[POUBM4DSPMM&YUFOU
‣ DPNQVUF7FSUJDBM4DSPMM0GGTFUDPNQVUF)PSJ[POUBM4DSPMM0GGTFU ‣ DPNQVUF7FSUJDBM4DSPMM3BOHFDPNQVUF)PSJ[POUBM4DSPMM3BOHF ‣ *UFN1SFGFUDI ‣ *UFN%FDPSBUJPOT ‣ *UFN"OJNBUPST ‣ 1SFEJDUJWF"OJNBUJPOT ‣ ʜ -BZPVU.BOBHFSͷؔػೳ
‣ PO-BZPVU$IJMESFO ‣ TDSPMM7FSUJDBMMZ#ZTDSPMM)PSJ[POUBMMZ#Z ‣ TDSPMM5P ‣ TNPPUI4DSPMM5P ‣ DPNQVUF7FSUJDBM4DSPMM&YUFOUDPNQVUF)PSJ[POUBM4DSPMM&YUFOU
‣ DPNQVUF7FSUJDBM4DSPMM0GGTFUDPNQVUF)PSJ[POUBM4DSPMM0GGTFU ‣ DPNQVUF7FSUJDBM4DSPMM3BOHFDPNQVUF)PSJ[POUBM4DSPMM3BOHF ‣ *UFN1SFGFUDI ‣ *UFN%FDPSBUJPOT ‣ *UFN"OJNBUPST ‣ 1SFEJDUJWF"OJNBUJPOT ‣ ʜ -BZPVU.BOBHFSͷؔػೳ
‣ PO-BZPVU$IJMESFO ‣ TDSPMM7FSUJDBMMZ#ZTDSPMM)PSJ[POUBMMZ#Z ‣ TDSPMM5P ‣ TNPPUI4DSPMM5P ‣ DPNQVUF7FSUJDBM4DSPMM&YUFOUDPNQVUF)PSJ[POUBM4DSPMM&YUFOU
‣ DPNQVUF7FSUJDBM4DSPMM0GGTFUDPNQVUF)PSJ[POUBM4DSPMM0GGTFU ‣ DPNQVUF7FSUJDBM4DSPMM3BOHFDPNQVUF)PSJ[POUBM4DSPMM3BOHF ‣ *UFN1SFGFUDI ‣ *UFN%FDPSBUJPOT ‣ *UFN"OJNBUPST ‣ 1SFEJDUJWF"OJNBUJPOT ‣ ʜ -BZPVU.BOBHFSͷؔػೳ
‣ PO-BZPVU$IJMESFO ‣ TDSPMM7FSUJDBMMZ#ZTDSPMM)PSJ[POUBMMZ#Z ‣ TDSPMM5P ‣ TNPPUI4DSPMM5P ‣ DPNQVUF7FSUJDBM4DSPMM&YUFOUDPNQVUF)PSJ[POUBM4DSPMM&YUFOU
‣ DPNQVUF7FSUJDBM4DSPMM0GGTFUDPNQVUF)PSJ[POUBM4DSPMM0GGTFU ‣ DPNQVUF7FSUJDBM4DSPMM3BOHFDPNQVUF)PSJ[POUBM4DSPMM3BOHF ‣ *UFN1SFGFUDI ‣ *UFN%FDPSBUJPOT ‣ *UFN"OJNBUPST ‣ 1SFEJDUJWF"OJNBUJPOT ‣ ʜ 5JNFUBCMF-BZPVU͕࣮͍ͯ͠ΔؔରԠ͍ͯ͠Δػೳ
‣ PO-BZPVU$IJMESFO ‣ TDSPMM7FSUJDBMMZ#ZTDSPMM)PSJ[POUBMMZ#Z ‣ TDSPMM5P ‣ TNPPUI4DSPMM5P ‣ DPNQVUF7FSUJDBM4DSPMM&YUFOUDPNQVUF)PSJ[POUBM4DSPMM&YUFOU
‣ DPNQVUF7FSUJDBM4DSPMM0GGTFUDPNQVUF)PSJ[POUBM4DSPMM0GGTFU ‣ DPNQVUF7FSUJDBM4DSPMM3BOHFDPNQVUF)PSJ[POUBM4DSPMM3BOHF ‣ *UFN1SFGFUDI ‣ *UFN%FDPSBUJPOT ‣ *UFN"OJNBUPST ‣ 1SFEJDUJWF"OJNBUJPOT ‣ ʜ 5JNFUBCMF-BZPVUʹ࣮༧ఆͷͷ ༏ઌத
‣ PO-BZPVU$IJMESFO ‣ TDSPMM7FSUJDBMMZ#ZTDSPMM)PSJ[POUBMMZ#Z ‣ TDSPMM5P ‣ TNPPUI4DSPMM5P ‣ DPNQVUF7FSUJDBM4DSPMM&YUFOUDPNQVUF)PSJ[POUBM4DSPMM&YUFOU
‣ DPNQVUF7FSUJDBM4DSPMM0GGTFUDPNQVUF)PSJ[POUBM4DSPMM0GGTFU ‣ DPNQVUF7FSUJDBM4DSPMM3BOHFDPNQVUF)PSJ[POUBM4DSPMM3BOHF ‣ *UFN1SFGFUDI ‣ *UFN%FDPSBUJPOT ‣ *UFN"OJNBUPST ‣ 1SFEJDUJWF"OJNBUJPOT ‣ ʜ 5JNFUBCMF-BZPVUʹ࣮༧ఆͷͷ ༏ઌ
-BZPVU.BOBHFSͷ࣮େม ΞϓϦͷཁ݅ʹ͋ΘͤͯػೳΛݶఆ͢ΕଟগָʹͳΔ ͦΕͰ׳Ε͍ͯͳ͚Ε݁ߏ͔͔࣌ؒΔ͔
-BZPVU.BOBHFS͕͍ͬͯΔ͜ͱ
‣ PO-BZPVU$IJMESFO ‣ QFSJPETͷใऩू ‣ JOJUJBMMBZPVU ‣ TDSPMM7FSUJDBMMZ#ZTDSPMM)PSJ[POUBMMZ#Z ‣ DIJMEWJFXTͷҠಈ
‣ ݟ͑ͳ͘ͳͬͨDIJMEWJFXΛSFNPWF ‣ ۭ͖εϖʔεʹDIJMEWJFXΛBEE -BZPVU.BOBHFS͕͍ͬͯΔ͜ͱ ͬ͘͟Γ
PO-BZPVU$IJMESFO ‣ ϨΠΞτͷॳظԽ ‣ ը໘ʹදࣔ͞ΕΔ͚ͩWJFXΛஔ ͍ͯ͘͠
PO-BZPVU$IJMESFO ‣ ϨΠΞτͷॳظԽ ‣ ը໘ʹදࣔ͞ΕΔ͚ͩWJFXΛஔ ͍ͯ͘͠
TDSPMM7FSUJDBMMZ#Z ‣ WJFXΛεϥΠυͤ͞Δ ‣ ݟ͑ͳ͘ͳͬͨWJFXΛফ͢ ‣ ۭ͖εϖʔεʹWJFXΛՃ͢Δ
TDSPMM7FSUJDBMMZ#Z ‣ WJFXΛεϥΠυͤ͞Δ ‣ ݟ͑ͳ͘ͳͬͨWJFXΛফ͢ ‣ ۭ͖εϖʔεʹWJFXΛՃ͢Δ
TDSPMM7FSUJDBMMZ#Z ‣ WJFXΛεϥΠυͤ͞Δ ‣ ݟ͑ͳ͘ͳͬͨWJFXΛফ͢ ‣ ۭ͖εϖʔεʹWJFXΛՃ͢Δ
TDSPMM7FSUJDBMMZ#Z ‣ WJFXΛεϥΠυͤ͞Δ ‣ ݟ͑ͳ͘ͳͬͨWJFXΛফ͢ ‣ ۭ͖εϖʔεʹWJFXΛՃ͢Δ
TDSPMM)PSJ[POUBMMZ#Z ‣ WJFXΛεϥΠυͤ͞Δ ‣ ݟ͑ͳ͘ͳͬͨWJFXΛফ͢ ‣ ۭ͖εϖʔεʹWJFXΛՃ͢Δ
TDSPMM)PSJ[POUBMMZ#Z ‣ WJFXΛεϥΠυͤ͞Δ ‣ ݟ͑ͳ͘ͳͬͨWJFXΛফ͢ ‣ ۭ͖εϖʔεʹWJFXΛՃ͢Δ
TDSPMM)PSJ[POUBMMZ#Z ‣ WJFXΛεϥΠυͤ͞Δ ‣ ݟ͑ͳ͘ͳͬͨWJFXΛফ͢ ‣ ۭ͖εϖʔεʹWJFXΛՃ͢Δ
TDSPMM)PSJ[POUBMMZ#Z ‣ WJFXΛεϥΠυͤ͞Δ ‣ ݟ͑ͳ͘ͳͬͨWJFXΛফ͢ ‣ ۭ͖εϖʔεʹWJFXΛՃ͢Δ
5JNFUBCMF-BZPVU.BOBHFSͷ࣮
5JNFUBCMF-BZPVU.BOBHFSͷ࣮ PO-BZPVU$IJMESFO
(0 until itemCount).forEach { val periodInfo = periodLookUp(it) val column
= columns.getOrPut(periodInfo.columnNumber) { ArrayList() } val period = Period( TimeUnit.MILLISECONDS.toMinutes(periodInfo.startUnixMillis).toInt(), TimeUnit.MILLISECONDS.toMinutes(periodInfo.endUnixMillis).toInt(), periodInfo.columnNumber, adapterPosition = it, positionInColumn = column.size ) periods.add(period) column.add(period) if (it == 0) { firstStartUnixMin = period.startUnixMin lastEndUnixMin = period.endUnixMin } else { firstStartUnixMin = min(period.startUnixMin, firstStartUnixMin) lastEndUnixMin = max(period.endUnixMin, lastEndUnixMin) } } ֤QFSJPEͷใऩू
(0 until itemCount).forEach { val periodInfo = periodLookUp(it) val column
= columns.getOrPut(periodInfo.columnNumber) { ArrayList() } val period = Period( TimeUnit.MILLISECONDS.toMinutes(periodInfo.startUnixMillis).toInt(), TimeUnit.MILLISECONDS.toMinutes(periodInfo.endUnixMillis).toInt(), periodInfo.columnNumber, adapterPosition = it, positionInColumn = column.size ) periods.add(period) column.add(period) if (it == 0) { firstStartUnixMin = period.startUnixMin lastEndUnixMin = period.endUnixMin } else { firstStartUnixMin = min(period.startUnixMin, firstStartUnixMin) lastEndUnixMin = max(period.endUnixMin, lastEndUnixMin) } } ֤QFSJPEͷใऩू
(0 until itemCount).forEach { val periodInfo = periodLookUp(it) val column
= columns.getOrPut(periodInfo.columnNumber) { ArrayList() } val period = Period( TimeUnit.MILLISECONDS.toMinutes(periodInfo.startUnixMillis).toInt(), TimeUnit.MILLISECONDS.toMinutes(periodInfo.endUnixMillis).toInt(), periodInfo.columnNumber, adapterPosition = it, positionInColumn = column.size ) periods.add(period) column.add(period) if (it == 0) { firstStartUnixMin = period.startUnixMin lastEndUnixMin = period.endUnixMin } else { firstStartUnixMin = min(period.startUnixMin, firstStartUnixMin) lastEndUnixMin = max(period.endUnixMin, lastEndUnixMin) } } ֤QFSJPEͷใऩू
anchor.leftColumn = 0 val columnCount = columns.size() val offsetY =
parentTop var offsetX = parentLeft for (columnNumber in 0 until columnCount) { offsetX += addColumn( columns[columnNumber].first(), offsetX, offsetY, true, recycler) anchor.rightColumn = columnNumber if (offsetX > parentRight) break } *OJUJBMMBZPVU
val range = startPeriod.positionInColumn until column.size for (i in range)
{ val period = column[i] val (width, height) = addPeriod(period, direction, offsetX, offsetY, recycler) offsetY += height columnWidth = width if (i == startPeriod.positionInColumn) anchor.top.put(columnNum, period.adapterPosition) anchor.bottom.put(columnNum, period.adapterPosition) if (offsetY > parentBottom) break } *OJUJBMMBZPVU
val range = startPeriod.positionInColumn until column.size for (i in range)
{ val period = column[i] val (width, height) = addPeriod(period, direction, offsetX, offsetY, recycler) offsetY += height columnWidth = width if (i == startPeriod.positionInColumn) anchor.top.put(columnNum, period.adapterPosition) anchor.bottom.put(columnNum, period.adapterPosition) if (offsetY > parentBottom) break } *OJUJBMMBZPVU
anchor.leftColumn = 0 val columnCount = columns.size() val offsetY =
parentTop var offsetX = parentLeft for (columnNumber in 0 until columnCount) { offsetX += addColumn( columns[columnNumber].first(), offsetX, offsetY, true, recycler) anchor.rightColumn = columnNumber if (offsetX > parentRight) break } *OJUJBMMBZPVU
5JNFUBCMF-BZPVU.BOBHFSͷ࣮ TDSPMM7FSUJDBMMZ#Z
val bottomView = findBottomView() ?: return 0 val period =
periods.getOrNull(bottomView.adapterPosition) ?: return 0 val bottom = getDecoratedBottom(bottomView) if (period.endUnixMin == lastEndUnixMin) if (bottom == parentBottom) 0 else min(dy, bottom - parentBottom) else dy εΫϩʔϧྔͷܭࢉ
val bottomView = findBottomView() ?: return 0 val period =
periods.getOrNull(bottomView.adapterPosition) ?: return 0 val bottom = getDecoratedBottom(bottomView) if (period.endUnixMin == lastEndUnixMin) if (bottom == parentBottom) 0 else min(dy, bottom - parentBottom) else dy εΫϩʔϧྔͷܭࢉ
val bottomView = findBottomView() ?: return 0 val period =
periods.getOrNull(bottomView.adapterPosition) ?: return 0 val bottom = getDecoratedBottom(bottomView) if (period.endUnixMin == lastEndUnixMin) if (bottom == parentBottom) 0 else min(dy, bottom - parentBottom) else dy εΫϩʔϧྔͷܭࢉ
val bottomView = findBottomView() ?: return 0 val period =
periods.getOrNull(bottomView.adapterPosition) ?: return 0 val bottom = getDecoratedBottom(bottomView) if (period.endUnixMin == lastEndUnixMin) if (bottom == parentBottom) 0 else min(dy, bottom - parentBottom) else dy εΫϩʔϧྔͷܭࢉ
override fun scrollVerticallyBy( dy: Int, recycler: Recycler, state: State ):
Int { if (dy == 0) return 0 val actualDy = calculateVerticallyScrollAmount(dy) if (actualDy == 0) return 0 offsetChildrenVertical(-actualDy) … } $IJMEWJFXTͷҠಈ
override fun scrollVerticallyBy( dy: Int, recycler: Recycler, state: State ):
Int { if (dy == 0) return 0 val actualDy = calculateVerticallyScrollAmount(dy) if (actualDy == 0) return 0 offsetChildrenVertical(-actualDy) … } $IJMEWJFXTͷҠಈ
(anchor.leftColumn..anchor.rightColumn) .forEach { columnNum -> val column = columns[columnNum] val
top = periods[anchor.top[columnNum]] val bottom = periods[anchor.bottom[columnNum]] column.subList( top.positionInColumn, bottom.positionInColumn ).forEach { val view = findViewByPosition(it.adapterPosition)?: return if (getDecoratedBottom(view) >= parentTop) return removeAndRecycleView(view, recycler) val belowPosition = column[it.positionInColumn + 1] .adapterPosition anchor.top.put(columnNum, belowPosition) } } ը໘͔ΒͰͨDIJMEWJFXͷআ
(anchor.leftColumn..anchor.rightColumn) .forEach { columnNum -> val column = columns[columnNum] val
top = periods[anchor.top[columnNum]] val bottom = periods[anchor.bottom[columnNum]] column.subList( top.positionInColumn, bottom.positionInColumn ).forEach { val view = findViewByPosition(it.adapterPosition)?: return if (getDecoratedBottom(view) >= parentTop) return removeAndRecycleView(view, recycler) val belowPosition = column[it.positionInColumn + 1] .adapterPosition anchor.top.put(columnNum, belowPosition) } } ը໘͔ΒͰͨDIJMEWJFXͷআ
(anchor.leftColumn..anchor.rightColumn) .forEach { columnNum -> val column = columns[columnNum] val
top = periods[anchor.top[columnNum]] val bottom = periods[anchor.bottom[columnNum]] column.subList( top.positionInColumn, bottom.positionInColumn ).forEach { val view = findViewByPosition(it.adapterPosition)?: return if (getDecoratedBottom(view) >= parentTop) return removeAndRecycleView(view, recycler) val belowPosition = column[it.positionInColumn + 1] .adapterPosition anchor.top.put(columnNum, belowPosition) } } ը໘͔ΒͰͨDIJMEWJFXͷআ
(anchor.leftColumn..anchor.rightColumn) .forEach { columnNum -> val column = columns[columnNum] val
top = periods[anchor.top[columnNum]] val bottom = periods[anchor.bottom[columnNum]] column.subList( top.positionInColumn, bottom.positionInColumn ).forEach { val view = findViewByPosition(it.adapterPosition)?: return if (getDecoratedBottom(view) >= parentTop) return removeAndRecycleView(view, recycler) val belowPosition = column[it.positionInColumn + 1] .adapterPosition anchor.top.put(columnNum, belowPosition) } } ը໘͔ΒͰͨDIJMEWJFXͷআ
(anchor.leftColumn..anchor.rightColumn) .forEach { columnNum -> val column = columns[columnNum] val
top = periods[anchor.top[columnNum]] val bottom = periods[anchor.bottom[columnNum]] column.subList( top.positionInColumn, bottom.positionInColumn ).forEach { val view = findViewByPosition(it.adapterPosition)?: return if (getDecoratedBottom(view) >= parentTop) return removeAndRecycleView(view, recycler) val belowPosition = column[it.positionInColumn + 1] .adapterPosition anchor.top.put(columnNum, belowPosition) } } ը໘͔ΒͰͨDIJMEWJFXͷআ
anchor.bottom.forEach { columnNum, position -> val view = findViewByPosition(position) ?:
return@forEach val bottom = getDecoratedBottom(view) if (bottom < parentBottom) { val left = getDecoratedLeft(view) val period = periods.getOrNull(position) ?: return@forEach val nextPeriod = columns.get(columnNum) .getOrNull(period.positionInColumn + 1) ?: return@forEach addPeriodsToColumn(nextPeriod, left, bottom, true, recycler) } } ۭ͖εϖʔεʹWJFXΛՃ
anchor.bottom.forEach { columnNum, position -> val view = findViewByPosition(position) ?:
return@forEach val bottom = getDecoratedBottom(view) if (bottom < parentBottom) { val left = getDecoratedLeft(view) val period = periods.getOrNull(position) ?: return@forEach val nextPeriod = columns.get(columnNum) .getOrNull(period.positionInColumn + 1) ?: return@forEach addPeriodsToColumn(nextPeriod, left, bottom, true, recycler) } } ۭ͖εϖʔεʹWJFXΛՃ
anchor.bottom.forEach { columnNum, position -> val view = findViewByPosition(position) ?:
return@forEach val bottom = getDecoratedBottom(view) if (bottom < parentBottom) { val left = getDecoratedLeft(view) val period = periods.getOrNull(position) ?: return@forEach val nextPeriod = columns.get(columnNum) .getOrNull(period.positionInColumn + 1) ?: return@forEach addPeriodsToColumn(nextPeriod, left, bottom, true, recycler) } } ۭ͖εϖʔεʹWJFXΛՃ
anchor.bottom.forEach { columnNum, position -> val view = findViewByPosition(position) ?:
return@forEach val bottom = getDecoratedBottom(view) if (bottom < parentBottom) { val left = getDecoratedLeft(view) val period = periods.getOrNull(position) ?: return@forEach val nextPeriod = columns.get(columnNum) .getOrNull(period.positionInColumn + 1) ?: return@forEach addPeriodsToColumn(nextPeriod, left, bottom, true, recycler) } } ۭ͖εϖʔεʹWJFXΛՃ
5JNFUBCMF-BZPVU.BOBHFSͷ࣮ ͜Μͳײ͡ʹͻͨ͢ΒੵΈΛ͍ͯ͘͠ɻ
·ͱΊ
‣ 3FDZDMFS7JFX͍ͧ͢͝ ‣ -BZPVU.BOBHFS͍ͧ͢͝ ‣ -BZPVU.BOBHFSେมͩͧ ‣ ΞϓϦͷཁ݅ʹΑͬͯଟগΒͩͧ͘ ·ͱΊ