Improve pager layout scrolling

This commit is contained in:
MM20 2023-01-19 19:18:58 +01:00
parent dfc52a3c38
commit e81ec26fe8
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389

View File

@ -2,7 +2,9 @@ package de.mm20.launcher2.ui.launcher
import androidx.activity.compose.BackHandler import androidx.activity.compose.BackHandler
import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.Spring
import androidx.compose.animation.core.animateDpAsState import androidx.compose.animation.core.animateDpAsState
import androidx.compose.animation.core.spring
import androidx.compose.animation.slideIn import androidx.compose.animation.slideIn
import androidx.compose.animation.slideOut import androidx.compose.animation.slideOut
import androidx.compose.foundation.LocalOverscrollConfiguration import androidx.compose.foundation.LocalOverscrollConfiguration
@ -27,6 +29,7 @@ import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.HorizontalPager
import androidx.compose.foundation.pager.PagerDefaults
import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.foundation.pager.rememberPagerState
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
@ -309,9 +312,13 @@ fun PagerScaffold(
reverseLayout = reverse, reverseLayout = reverse,
state = pagerState, state = pagerState,
userScrollEnabled = !isWidgetEditMode, userScrollEnabled = !isWidgetEditMode,
flingBehavior = PagerDefaults.flingBehavior(
state = pagerState,
lowVelocityAnimationSpec = spring(
stiffness = Spring.StiffnessMediumLow,
),
)
) { ) {
val pagerProgress =
pagerState.currentPage + pagerState.currentPageOffsetFraction
when (it) { when (it) {
0 -> { 0 -> {
val editModePadding by animateDpAsState(if (isWidgetEditMode && bottomSearchBar) 56.dp else 0.dp) val editModePadding by animateDpAsState(if (isWidgetEditMode && bottomSearchBar) 56.dp else 0.dp)
@ -349,6 +356,8 @@ fun PagerScaffold(
.verticalScroll(widgetsScrollState) .verticalScroll(widgetsScrollState)
.windowInsetsPadding(WindowInsets.safeDrawing) .windowInsetsPadding(WindowInsets.safeDrawing)
.graphicsLayer { .graphicsLayer {
val pagerProgress =
pagerState.currentPage + pagerState.currentPageOffsetFraction
alpha = 1f - pagerProgress alpha = 1f - pagerProgress
} }
.padding(8.dp) .padding(8.dp)
@ -404,6 +413,8 @@ fun PagerScaffold(
.requiredWidth(width) .requiredWidth(width)
.fillMaxHeight() .fillMaxHeight()
.graphicsLayer { .graphicsLayer {
val pagerProgress =
pagerState.currentPage + pagerState.currentPageOffsetFraction
alpha = pagerProgress alpha = pagerProgress
} }
.nestedScroll(searchNestedScrollConnection) .nestedScroll(searchNestedScrollConnection)