Мягкая привязка HorizontalPager в Android Jetpack ComposeAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Мягкая привязка HorizontalPager в Android Jetpack Compose

Сообщение Anonymous »

Я пытаюсь добиться мягкой привязки для HorizontalPager в Android Jetpack Compose, вот мой код:

Код: Выделить всё

HorizontalPager(
state = pagerState,
modifier = Modifier
.fillMaxSize(),
beyondViewportPageCount = 1,
flingBehavior = PagerDefaults.flingBehavior(
state = pagerState,
snapAnimationSpec = spring(
stiffness = Spring.StiffnessVeryLow,
visibilityThreshold = 3f
),
),
){
// pages
}
Я установил для поведения броска медленную жесткость и более высокий порог видимости, это сделало горизонтальный пейджер щелкать медленнее и мягче, но это происходило только тогда, когда я медленно пролистывал страницу и медленнее отпускал палец , но когда я быстро прокручиваю его или использую:

Код: Выделить всё

pagerState.animateScrollToPage(
page = currentPageIndex.intValue + 1,
animationSpec = spring(
stiffness = Spring.StiffnessVeryLow,
visibilityThreshold = 3f
)
)
он ​​продолжает делать жёсткую привязку, а не мягкую, как я ожидал.
почему и как это исправить?
p/s: это код, который я нашел в Pager API:

Код: Выделить всё

@Composable
fun flingBehavior(
state: PagerState,
pagerSnapDistance: PagerSnapDistance = PagerSnapDistance.atMost(1),
decayAnimationSpec: DecayAnimationSpec = rememberSplineBasedDecay(),
snapAnimationSpec: AnimationSpec = spring(
stiffness = Spring.StiffnessMediumLow,
visibilityThreshold = Int.VisibilityThreshold.toFloat()
),
@FloatRange(from = 0.0, to = 1.0) snapPositionalThreshold: Float = 0.5f
): TargetedFlingBehavior {
require(snapPositionalThreshold in 0f..1f) {
"snapPositionalThreshold should be a number between 0 and 1. " +
"You've specified $snapPositionalThreshold"
}
val density = LocalDensity.current
val layoutDirection = LocalLayoutDirection.current
return remember(
state,
decayAnimationSpec,
snapAnimationSpec,
pagerSnapDistance,
density,
layoutDirection
) {
val snapLayoutInfoProvider =
SnapLayoutInfoProvider(
state,
pagerSnapDistance
) { flingVelocity, lowerBound, upperBound ->
calculateFinalSnappingBound(
pagerState = state,
layoutDirection = layoutDirection,
snapPositionalThreshold = snapPositionalThreshold,
flingVelocity = flingVelocity,
lowerBoundOffset = lowerBound,
upperBoundOffset = upperBound
)
}

snapFlingBehavior(
snapLayoutInfoProvider = snapLayoutInfoProvider,
decayAnimationSpec = decayAnimationSpec,
snapAnimationSpec = snapAnimationSpec
)
}
}
они установили:

Код: Выделить всё

snapAnimationSpec: AnimationSpec = spring(
stiffness = Spring.StiffnessMediumLow,
visibilityThreshold = Int.VisibilityThreshold.toFloat()
),
для анимации привязки.>

Подробнее здесь: https://stackoverflow.com/questions/791 ... ck-compose
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»