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
Moyuru Aizawa
March 06, 2019
Programming
760
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
720
BLEを使ったアプリを継続的に開発するために
lvla
0
1.1k
RecyclerView.ItemAnimator
lvla
1
390
RecycledViewPool
lvla
1
300
Other Decks in Programming
See All in Programming
【QA Test Talk Vol.8】AI-DLC による Whole Team Approach の加速
pkshadeck
PRO
0
260
MySQLとPostgreSQLって何が違うの?
akagami
0
150
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
740
Go 1.27 における memory allocation の高速化
andpad
0
350
実装をデザインガイドラインに追従させるための取り組み / 260731-dip-mosh-design-system
dachi023
0
7.9k
Loosening the Reins: Go Generics Get More Flexible
kuro_kurorrr
0
350
承認済みなのに差戻しできてしまうバグ、型で潰せます
shinchit
0
120
仕様駆動開発の消費期限
watany
20
9.1k
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
550
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
450
プロポーザルを書いてもらう
pvcresin
0
590
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
530
Featured
See All Featured
Everyday Curiosity
cassininazir
0
300
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.9k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Exploring anti-patterns in Rails
aemeredith
3
480
How to Ace a Technical Interview
jacobian
281
24k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
490
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
32
4.5k
Art, The Web, and Tiny UX
lynnandtonic
304
22k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
490
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
490
Making Projects Easy
brettharned
120
6.7k
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େมͩͧ ‣ ΞϓϦͷཁ݅ʹΑͬͯଟগΒͩͧ͘ ·ͱΊ