Jetpack Compose では 1.1.0 から LazyColumn
/LazyRow
や Modifier.verticalScroll
/Modifier.horizontalScroll
で OverScroll のエフェクトが適用されるようになります。
( Android 11 以前は波のようなエフェクト、Android 12 以降はストレッチのエフェクト)
Android 11以前 | Android 12以降 |
---|---|
AndroidView では android:overScrollMode="never"
で無効にできていましたが、Jetpack Compose ではどうすれば無効にできるのか調べたので書いていこうと思います。
OverScroll を無効にする
LocalOverScrollConfiguration
を null で上書きすることで下層の Scrollable な Composable の OverScroll エフェクトを消すことができます。
@Composable
fun Sample() {
CompositionLocalProvider(
LocalOverScrollConfiguration provides null
) {
LazyColumn {
...
}
}
}
OverScrollConfiguration
とは何か
LocalOverScrollConfiguration
はデフォルトで OverScrollConfiguration
を提供しており、その OverScrollConfiguration
は OverScroll の色や表示の制御などを設定できるクラスになっています。
OverScrollConfiguration(
glowColor: Color?,
forceShowAlways: Boolean?,
drawPadding: PaddingValues?
)
glowColor
を指定すると Android 11 以前の OverScroll のエフェクトを任意の色にすることができます。
ここで設定した OverScrollConfiguration
が scroll や Lazy 系で rememberOverScrollController()
から受け取ってリストにエフェクトを反映させています。