Пользовательский интерфейс зависает при возобновлении активностиAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Пользовательский интерфейс зависает при возобновлении активности

Сообщение Anonymous »

РЕДАКТИРОВАТЬ
Я новичок в создании, и у меня есть фон с анимацией и горизонтальным пейджером, анимация представляет собой бесконечную анимацию и несколько кругов. случайно перемещаясь по экрану, мой горизонтальный пейджер содержит несколько карточек с анимацией при их прокрутке и зеркальным эффектом.
Фон:
fun CircleBrush(color: String, offset: Offset) : Brush{
return Brush.radialGradient(
colors = listOf(
Color(android.graphics.Color.parseColor(color)),
Color.Transparent
),
center = offset,
radius = 1000F,
)
}

fun getRandomPosition(size: Int): Float{
val random = Random.nextInt(1,10).div(10F)
return (size.toFloat() * random)
}
@Composable
fun AuroraView(viewModel : MyViewModel) {
val context = LocalContext.current
val displayMetrics = context.resources.displayMetrics
val ANIMATION_DURATION = 8

val width = displayMetrics.widthPixels
val height = displayMetrics.heightPixels

val easing = LinearEasing

var target1 by remember {
mutableStateOf(Offset.Zero)
}
var target2 by remember {
mutableStateOf(Offset(width.toFloat(), 0F))
}
var target3 by remember {
mutableStateOf(Offset(width.toFloat(), height.toFloat()))
}

LaunchedEffect(viewModel.randomList) {
delay((ANIMATION_DURATION/2).seconds)
target1 = Offset(getRandomPosition(width), getRandomPosition(height))
target2 = Offset(getRandomPosition(width), getRandomPosition(height))
target3 = Offset(getRandomPosition(width), getRandomPosition(height))
while (viewModel.animateBackground) {
delay(ANIMATION_DURATION.seconds)
target1 = Offset(getRandomPosition(width), getRandomPosition(height))
target2 = Offset(getRandomPosition(width), getRandomPosition(height))
target3 = Offset(getRandomPosition(width), getRandomPosition(height))
}
}

val offset1 by animateOffsetAsState(
targetValue = target1, tween(ANIMATION_DURATION * 1000, easing = easing),
label = "offset1"
)
val offset2 by animateOffsetAsState(
targetValue = target2, tween(ANIMATION_DURATION * 1000, easing = easing),
label = "offset2"
)
val offset3 by animateOffsetAsState(
targetValue = target3, tween(ANIMATION_DURATION * 1000, easing = easing),
label = "offset3"
)

val brush1 = remember(offset1) { CircleBrush(color = "#8B8BCB", offset = offset1) }
val brush2 = remember(offset2) { CircleBrush(color = "#F8906F", offset = offset2) }
val brush3 = remember(offset3) { CircleBrush(color = "#FADDF8", offset = offset3) }

Canvas(
modifier = Modifier
.fillMaxSize()
) {
drawRect(
brush = brush1,
size = size
)
drawRect(
brush = brush2,
size = size
)
drawRect(
brush = brush3,
size = size
)
}
}

Горизонтальный пейджер
val pagerState = rememberPagerState(
pageCount = { viewModel.list.size + 1 })
HorizontalPager(
state = pagerState,
pageSpacing = 12.dp,
contentPadding = PaddingValues(start = 64.dp, end = 64.dp),
modifier = Modifier
.fillMaxWidth()
.padding(top = 40.dp)
) { page ->
Box(modifier = Modifier.pagerRotationTransition(page, pagerState )) {
if (page == 0) {
GDefaultBusinessCard(
modifier = Modifier
)
} else {
GRandomBusinessCard(
modifier = Modifier
.clickable(
indication = null,
interactionSource = remember { MutableInteractionSource() }
) {
haptic.performHapticFeedback(HapticFeedbackType.LongPress)
viewModel.onUIEvent(

ClientSelectorViewModel.ClientSelectorUiEvent
.OnBusinessSelected(viewModel.list[page - 1].uniqueAuthCode)) },
viewModel.list[page - 1]
)
}
}
}

@OptIn(ExperimentalFoundationApi::class)
fun Modifier.pagerRotationTransition(page: Int, pagerState: PagerState) = graphicsLayer {
val pageOffset = pagerState.offsetForPage(page)
if (-1.5F info.index == it }
?: return@derivedStateOf 1f
currentItemInfo.offset / (currentItemInfo.size + pxValue)
}
}
Box (modifier = Modifier
.fillParentMaxWidth()
.fillMaxHeight()
.pagerRotationTransition(offset)
) {
if (it == 0) {
GDefaultBusinessCard(
modifier = Modifier
.fillMaxWidth()
)
} else {
GRandomBusinessCard(
modifier = Modifier
.fillMaxWidth()
.clickable(
indication = null,
interactionSource = remember {
MutableInteractionSource()
}
) {
haptic.performHapticFeedback(
HapticFeedbackType.LongPress)
viewModel.onUIEvent(
ClientSelectorViewModel.ClientSelectorUiEvent
.OnBusinessSelected(viewModel.randomBusinessList[it - 1].uniqueAuthCode)
)
},
viewModel.randomBusinessList[it - 1]
)
}

fun Modifier.pagerRotationTransition(pageOffset: Float) = graphicsLayer {
val translation = 80F
val rotation = 25F
if (-1.5F

Подробнее здесь: https://stackoverflow.com/questions/783 ... ty-resumes
Ответить

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

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

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

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

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