-
Anonymous
Анимация линейного градиента (кисть) бесконечно и обратно в Compose
Сообщение
Anonymous »
Исходное состояние выглядит так (
)
at 1f Я хочу получить обратный градиент:
Текущий код:
Код: Выделить всё
val transition = rememberInfiniteTransition(label = "NavIconGradientAnim")
val animatedOffset by transition.animateFloat(
initialValue = 0f, targetValue = 1f,
label = "NavIconGradientAnimOffset",
animationSpec = infiniteRepeatable(
animation = tween(1500, easing = LinearEasing),
repeatMode = RepeatMode.Reverse
)
)
Image(
painterResource(id = item.icon),
contentDescription = null,
modifier = Modifier.drawWithCache {
onDrawWithContent {
with(drawContext.canvas.nativeCanvas) {
val angle = 45f
val endX = drawContext.size.width
val endY = (endX * kotlin.math.tan(Math.toRadians(angle.toDouble()))).toFloat()
val checkPoint = saveLayer(null, null)
drawContent()
val gradient = Brush.linearGradient(
colors = listOf(Color.Blue, Color.Yellow),
start = Offset(animatedOffset * endX, animatedOffset * endY),
end = Offset(endX, endX)
)
drawRect(
brush = gradient,
blendMode = BlendMode.SrcIn
)
restoreToCount(checkPoint)
}
}
}
)
Я пытался установить
Код: Выделить всё
end = Offset(endX - animatedOffset * endX, endY - animatedOffset * endY),
но выглядит не очень хорошо (предварительный просмотр GIF):
оно резко меняет цвет
Подробнее здесь:
https://stackoverflow.com/questions/767 ... in-compose
1762876944
Anonymous
Исходное состояние выглядит так ([code]animatedOffset = 0f[/code])
[img]https://i.sstatic.net/0cGSI.png[/img]
at 1f Я хочу получить обратный градиент:
[img]https://i.sstatic.net/C9Lvt.png[/img]
Текущий код:
[code]val transition = rememberInfiniteTransition(label = "NavIconGradientAnim")
val animatedOffset by transition.animateFloat(
initialValue = 0f, targetValue = 1f,
label = "NavIconGradientAnimOffset",
animationSpec = infiniteRepeatable(
animation = tween(1500, easing = LinearEasing),
repeatMode = RepeatMode.Reverse
)
)
Image(
painterResource(id = item.icon),
contentDescription = null,
modifier = Modifier.drawWithCache {
onDrawWithContent {
with(drawContext.canvas.nativeCanvas) {
val angle = 45f
val endX = drawContext.size.width
val endY = (endX * kotlin.math.tan(Math.toRadians(angle.toDouble()))).toFloat()
val checkPoint = saveLayer(null, null)
drawContent()
val gradient = Brush.linearGradient(
colors = listOf(Color.Blue, Color.Yellow),
start = Offset(animatedOffset * endX, animatedOffset * endY),
end = Offset(endX, endX)
)
drawRect(
brush = gradient,
blendMode = BlendMode.SrcIn
)
restoreToCount(checkPoint)
}
}
}
)
[/code]
Я пытался установить
[code]end = Offset(endX - animatedOffset * endX, endY - animatedOffset * endY),[/code]
но выглядит не очень хорошо (предварительный просмотр GIF):
[img]https://i.sstatic.net/yKv7d.gif[/img]
оно резко меняет цвет
Подробнее здесь: [url]https://stackoverflow.com/questions/76779131/animate-linear-gradient-brush-infinitely-and-reversely-in-compose[/url]