Как прокручивать frontLayerContent без прерывания в создании реактивного ранца ⇐ Android
-
Гость
Как прокручивать frontLayerContent без прерывания в создании реактивного ранца
Я хочу, чтобы прокрутка frontLayerContent продолжалась без прерывания. Например, когда я начал прокручивать frontLayerContent, backLayerContent скроет и остановит frontLayerContent в верхней части экрана. Затем мне снова приходится провести жестом вверх, чтобы прокрутить frontLayerContent. Так можно ли этого добиться одним жестом?
Выход: YouTube
На видео хорошо видно, что когда я начал прокручивать вверх, frontLayerContent застрял вверху. После этого я снова прокручиваю вверх, и все идет, т. е. для выполнения прокрутки требуется 2-кратный жест прокрутки вверх. Я хочу сделать это только 1 раз.
@OptIn(ExperimentalMaterialApi::class) @Композитный весело CollapsingTopAppBarStylingScreen() { var isBackDropAnimationStarts, запомнив {mutableStateOf(false) } val iconOffsetAnimation: Dp от animateDpAsState( if (!isBackDropAnimationStars) 13.dp else 0.dp, tween(1000) ) val textOffsetAnimation: Dp от animateDpAsState( if (!isBackDropAnimationStarts) 6.dp else 0.dp, tween(1000) ) val viewAlpha: Float от animateFloatAsState( targetValue = if (!isBackDropAnimationStars) 1f else 0f, анимацияSpec = tween( продолжительностьМиллис = 1000, ) ) val scaffoldState = RememberBackdropScaffoldState(BackdropValue.Revealed) ФонЭшаф( scaffoldState = scaffoldState, AppBar = {}, постоянныйAppBar = ложь, peekHeight = 0.dp, backLayerContent = { Столбец( модификатор = Модификатор .fillMaxWidth() .padding( начало = 16.dp, верх = 16.dp, низ = 10.dp ), ) { Изображение( модификатор = Modifier.padding(top = iconOffsetAnimation), альфа = просмотрАльфа, imageVector = Icons.Default.ShoppingCart, colorFilter = ColorFilter.tint(color = Color.White), ContentDescription = ноль, ) Текст( модификатор = Modifier.padding(top = textOffsetAnimation), text = "Здравствуйте, Анна", размер шрифта = 20.sp, цвет = Color.White.copy(альфа = viewAlpha), ) } }, backLayerBackgroundColor = Color.DarkGray, frontLayerBackgroundColor = Цвет.Белый, frontLayerScrimColor = Цвет.Прозрачный, frontLayerContent = { LazyColumn( contentPadding = PaddingValues(по горизонтали = 24.dp, по вертикали = 24.dp), вертикальныйArrangement = Arrangement.spacedBy(8.dp) ) { список значений = (0..40).map { it.toString() } элементы (количество = list.size) { Текст( текст = список[оно], модификатор = Модификатор .fillMaxWidth() .padding(верх = 10.dp), цвет = Цвет.Черный, ) } } }) }
Я хочу, чтобы прокрутка frontLayerContent продолжалась без прерывания. Например, когда я начал прокручивать frontLayerContent, backLayerContent скроет и остановит frontLayerContent в верхней части экрана. Затем мне снова приходится провести жестом вверх, чтобы прокрутить frontLayerContent. Так можно ли этого добиться одним жестом?
Выход: YouTube
На видео хорошо видно, что когда я начал прокручивать вверх, frontLayerContent застрял вверху. После этого я снова прокручиваю вверх, и все идет, т. е. для выполнения прокрутки требуется 2-кратный жест прокрутки вверх. Я хочу сделать это только 1 раз.
@OptIn(ExperimentalMaterialApi::class) @Композитный весело CollapsingTopAppBarStylingScreen() { var isBackDropAnimationStarts, запомнив {mutableStateOf(false) } val iconOffsetAnimation: Dp от animateDpAsState( if (!isBackDropAnimationStars) 13.dp else 0.dp, tween(1000) ) val textOffsetAnimation: Dp от animateDpAsState( if (!isBackDropAnimationStarts) 6.dp else 0.dp, tween(1000) ) val viewAlpha: Float от animateFloatAsState( targetValue = if (!isBackDropAnimationStars) 1f else 0f, анимацияSpec = tween( продолжительностьМиллис = 1000, ) ) val scaffoldState = RememberBackdropScaffoldState(BackdropValue.Revealed) ФонЭшаф( scaffoldState = scaffoldState, AppBar = {}, постоянныйAppBar = ложь, peekHeight = 0.dp, backLayerContent = { Столбец( модификатор = Модификатор .fillMaxWidth() .padding( начало = 16.dp, верх = 16.dp, низ = 10.dp ), ) { Изображение( модификатор = Modifier.padding(top = iconOffsetAnimation), альфа = просмотрАльфа, imageVector = Icons.Default.ShoppingCart, colorFilter = ColorFilter.tint(color = Color.White), ContentDescription = ноль, ) Текст( модификатор = Modifier.padding(top = textOffsetAnimation), text = "Здравствуйте, Анна", размер шрифта = 20.sp, цвет = Color.White.copy(альфа = viewAlpha), ) } }, backLayerBackgroundColor = Color.DarkGray, frontLayerBackgroundColor = Цвет.Белый, frontLayerScrimColor = Цвет.Прозрачный, frontLayerContent = { LazyColumn( contentPadding = PaddingValues(по горизонтали = 24.dp, по вертикали = 24.dp), вертикальныйArrangement = Arrangement.spacedBy(8.dp) ) { список значений = (0..40).map { it.toString() } элементы (количество = list.size) { Текст( текст = список[оно], модификатор = Модификатор .fillMaxWidth() .padding(верх = 10.dp), цвет = Цвет.Черный, ) } } }) }
Мобильная версия