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
LazyColumnのitemがViewPortの中で占める領域の割合を知りたい
Search
Keishin Yokomaku
November 10, 2023
Technology
760
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
LazyColumnのitemがViewPortの中で占める領域の割合を知りたい
Keishin Yokomaku
November 10, 2023
More Decks by Keishin Yokomaku
See All by Keishin Yokomaku
Base64 in Android
keithyokoma
0
55
One screen, many BottomSheets
keithyokoma
0
470
Build apps for Cars
keithyokoma
0
600
Save the state
keithyokoma
0
640
Either in Kotlin
keithyokoma
0
650
持続的なアプリ開発のためのDXを支える技術
keithyokoma
2
5.6k
Make the objects serializable with kotlinx.serialization
keithyokoma
0
5.4k
Kotlin で書く Gradle Custom Tasks
keithyokoma
0
590
DX Improvements
keithyokoma
3
460
Other Decks in Technology
See All in Technology
トークンマネジメントでAIにとって働きやすい環境を実現する
hikaruegashira
0
120
カートの信頼性を担保するWireMockを使ったe2eテスト
ykagano
0
620
tamachi.go 誕生の裏側
rymiyamoto
1
180
2026-08-15 JAWS-UG 茨城 #16 Secrets ManagerにおけるSecret値の管理(Terraformの場合) / Secrets Manager Secrets
masasuzu
0
390
会社紹介資料 / Sansan Company Profile
sansan33
PRO
24
430k
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
5k
長期運営で肥大化したExcelマスターデータの解消に向けた移行事例
gree_tech
PRO
0
100
AIのためのEthernet技術動向 (SerDes)
markunet
1
250
AI開発に用いられるHPC技術について
gpuunite_official
0
180
LanceDB入門
mocobeta
9
630
35分でわかるEffective Platform Engineering
nwiizo
5
550
MIXIで活躍できるエンジニアを 若手社員目線で考えてみる
mixi_engineers
PRO
0
110
Featured
See All Featured
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
440
Documentation Writing (for coders)
carmenintech
77
5.5k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.4k
Designing Experiences People Love
moore
143
24k
The browser strikes back
jonoalderson
0
1.5k
The Spectacular Lies of Maps
axbom
PRO
1
930
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
WCS-LA-2024
lcolladotor
0
800
Lightning Talk: Beautiful Slides for Beginners
inesmontani
PRO
2
640
Abbi's Birthday
coloredviolet
3
9.4k
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Transcript
LazyColumnͷitem͕ViewPortͷ தͰΊΔྖҬͷׂ߹ΛΓ͍ͨ Keishin Yokomaku (@KeithYokoma) / Giftmall, inc. Shibuya.apk #45
Γ͍ͨʂ Shibuya.apk #45
LazyColumnͷitem͕ViewPortͷதͰΊΔྖҬͷׂ߹ΛΓ͍ͨ Γ͍ͨ͜ͱ 100% n% m% 0% Shibuya.apk #45
Γ͍ͨʂ Shibuya.apk #45
LazyColumnͷitem͕ViewPortͷதͰΊΔྖҬͷׂ߹ΛΓ͍ͨ LazyListState ͰܭࢉͰ͖Δ ▸ ViewPort ͷେ͖͞ ▸ LazyListState.layoutInfo.viewportSize Ͱऔಘ͢Δ ▸
ViewPort ʹऩ·͍ͬͯΔ item ͷߴ͞ ▸ LazyListItemInfo ͱ LazyListState.layoutInfo ΛΈ߹ΘͤΔ ▸ LazyListItemInfo ͷϦετ ViewPort ʹ͋Δͷ͔͠ೖ͍ͬͯͳ͍ ▸ item ͕ը໘֎ʹ͋Δͱ͖ܭࢉ͠ͳͯ͘0%ͱ͔Δ Shibuya.apk #45
LazyColumnͷitem͕ViewPortͷதͰΊΔྖҬͷׂ߹ΛΓ͍ͨ ViewPort ʹऩ·͍ͬͯΔ item ͷߴ͞ ▸ ViewPort ʹऩ·͍ͬͯΔߴ͞ = ViewPort
ʹ͋Δ item ͷԼͷ࠲ඪ - ্ͷ࠲ඪ Shibuya.apk #45
LazyColumnͷitem͕ViewPortͷதͰΊΔྖҬͷׂ߹ΛΓ͍ͨ ViewPort ʹऩ·͍ͬͯΔ item ͷߴ͞ ্ Լ Shibuya.apk #45
LazyColumnͷitem͕ViewPortͷதͰΊΔྖҬͷׂ߹ΛΓ͍ͨ ViewPort ʹऩ·͍ͬͯΔ item ͷߴ͞ ▸ ্ ▸ ViewPort ͦͷͷͷ
offset ͱ item ͷ offset Ͱ্Λܭࢉ ▸ offset ෛͷʹͳΓಘΔ͕ɺܭࢉ݁ՌෛʹͳΒͳ͍Α͏ʹௐ ▸ Լ ▸ ViewPort ͦͷͷͷ offset ͱɺitem શମͷ offset ͱߴ͞ͰԼΛܭࢉ ▸ ͪ͜Β offset ෛͷʹͳΓಘΔ ▸ item ͕ ViewPort ΑΓେ͖͍߹ɺ࠷େͷߴ͞ ViewPort ͷେ͖͞ Shibuya.apk #45
LazyColumnͷitem͕ViewPortͷதͰΊΔྖҬͷׂ߹ΛΓ͍ͨ ViewPort ʹऩ·͍ͬͯΔ item ͷߴ͞ fun LazyListState.visibleHeight(itemInfo: LazyListItemInfo): Int {
val start = (layoutInfo.viewportStartOffset + itemInfo.offset) .coerceAtLeast(0) val end = (itemInfo.offset + itemInfo.size - layoutInfo.viewportEndOffset) .coerceAtLeast(itemInfo.offset + itemInfo.size) .coerceAtMost(layoutInfo.viewportSize.height) return end - start } Shibuya.apk #45
LazyColumnͷitem͕ViewPortͷதͰΊΔྖҬͷׂ߹ΛΓ͍ͨ ViewPort ʹΊΔ item ͷߴ͞ͷׂ߹ fun LazyListState.calculateOccupationInViewport(position: Int): Float =
calculateOccupationInViewport(listOf(position)) fun LazyListState.calculateOccupationInViewport(positions: List<Int>): Float { val viewportSize = layoutInfo.viewportSize val totalTargetHeight = layoutInfo.visibleItemsInfo .filter { info -> positions.contains(info.index) } .sumOf { info -> visibleHeight(info) } return totalTargetHeight.toFloat() / viewportSize.height } Shibuya.apk #45
LazyColumnͷitem͕ViewPortͷதͰΊΔྖҬͷׂ߹ΛΓ͍ͨ ҙ: stickyHeader Λ͏࣌ ▸ ׂ߹͕1.0fΛ͑Δ͜ͱ͕͋Δ ▸ ࣍ͷ݅Λຬͨ࣌͢ ▸ ෳͷ
item ͷߴ͞Ͱׂ߹Λܭࢉ͢Δ ▸ ViewPort ΑΓେ͖͍ item ͕ܭࢉʹ͍Δ ▸ item ʹॏͳ͍ͬͯΔ stickyHeader ܭࢉʹೖΔͱ͖ ▸ stickyHeader item ʹॏͶͯද͍ࣔͯ͠ΔͷͰɺ ॏͳΓͷ෦Λݮࢉ͠ͳ͍ͱ1.0fΛ͑ͯ͠·͏ Shibuya.apk #45
LazyColumnͷitem͕ViewPortͷதͰΊΔྖҬͷׂ߹ΛΓ͍ͨ ҙ: stickyHeader Λ͏࣌ LazyListItemInfo.index: 0 LazyListItemInfo.index: 1 LazyListItemInfo.index: 2
… Shibuya.apk #45
LazyColumnͷitem͕ViewPortͷதͰΊΔྖҬͷׂ߹ΛΓ͍ͨ ҙ: stickyHeader Λ͏࣌ ▸ LazyListItemInfo.index ͷ ▸ stickyHeader
item ͯ͢·ͱΊͯ௨͠൪߸ʹͳΔ ▸ stickyHeader ΛܭࢉʹೖΕͨ͘ͳ͍ͱ͖ ▸ stickyHeader ͱ͔Δ key Λઃఆ͢Δ ▸ ࣗͰ stickyHeader ͕Կ൪ʹདྷΔ͔͓֮͑ͯ͘ Shibuya.apk #45
LazyColumnͷitem͕ViewPortͷதͰΊΔྖҬͷׂ߹ΛΓ͍ͨ ҙ: LazyListState ͷߋ৽ස ▸ LazyListState ͍͍͢͝Ͱߋ৽͞ΕΔ ▸ ࣍ͷ͍ͣΕ͔Ͱϥοϓͯ͠దͳසͰܭࢉ͢Δ ▸
derivedStateOf ▸ LaunchedEffect + snapshotFlow Shibuya.apk #45
LazyColumnͷitem͕ViewPortͷதͰΊΔྖҬͷׂ߹ΛΓ͍ͨ About me ▸ Keishin Yokomaku - @KeithYokoma ▸ GitHub
/ Twitter / Stack Over fl ow ▸ Giftmall, Inc. / Android App Engineer Shibuya.apk #45
LazyColumnͷitem͕ViewPortͷ தͰΊΔྖҬͷఔΛΓ͍ͨ Keishin Yokomaku (@KeithYokoma) / Giftmall, inc. Shibuya.apk #45