解决动画携程管理

This commit is contained in:
2024-10-11 21:50:16 +08:00
parent 6b750b507b
commit ae4d87c5ab

View File

@@ -4,13 +4,8 @@ import android.content.ContentValues.TAG
import android.content.res.Resources import android.content.res.Resources
import android.util.Log import android.util.Log
import android.widget.Toast import android.widget.Toast
import androidx.compose.animation.core.LinearEasing
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.core.infiniteRepeatable
import androidx.compose.animation.core.tween
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.border
import androidx.compose.foundation.gestures.Orientation import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.rememberScrollableState import androidx.compose.foundation.gestures.rememberScrollableState
import androidx.compose.foundation.gestures.scrollable import androidx.compose.foundation.gestures.scrollable
@@ -23,11 +18,9 @@ import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.widthIn
import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll import androidx.compose.foundation.verticalScroll
@@ -43,7 +36,6 @@ import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.scale import androidx.compose.ui.draw.scale
import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Brush
@@ -51,16 +43,11 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.compose.LocalLifecycleOwner
import com.aiosman.riderpro.AppState import com.aiosman.riderpro.AppState
import com.aiosman.riderpro.AppStore import com.aiosman.riderpro.AppStore
import com.aiosman.riderpro.LocalNavController import com.aiosman.riderpro.LocalNavController
@@ -73,7 +60,6 @@ import com.aiosman.riderpro.ui.modifiers.noRippleClickable
import com.aiosman.riderpro.utils.GoogleLogin import com.aiosman.riderpro.utils.GoogleLogin
import com.google.accompanist.systemuicontroller.rememberSystemUiController import com.google.accompanist.systemuicontroller.rememberSystemUiController
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.cancel
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@@ -237,18 +223,17 @@ fun MovingImageWall(resources: Resources) {
val imageHeight = 208.dp val imageHeight = 208.dp
val imageHeightPx = imageHeight.value * density // 将 dp 转换为像素 val imageHeightPx = imageHeight.value * density // 将 dp 转换为像素
val resetThreshold = imageHeightPx val resetThreshold = imageHeightPx
var offset1 by remember { mutableFloatStateOf( -resetThreshold * 3) } // 使用 remember 保存动画状态,并在应用停止时重置
// 每次 recomposition 时重置 offset
var offset1 by remember { mutableFloatStateOf(-resetThreshold * 3) }
var offset2 by remember { mutableFloatStateOf(0f) } var offset2 by remember { mutableFloatStateOf(0f) }
var offset3 by remember { mutableFloatStateOf( -resetThreshold * 3) } var offset3 by remember { mutableFloatStateOf(-resetThreshold * 3) }
val lifecycleOwner = LocalLifecycleOwner.current val coroutineScope = rememberCoroutineScope()
val coroutineScope = rememberCoroutineScope() // 使用 rememberCoroutineScope
LaunchedEffect(key1 = lifecycleOwner) { // 使用 LaunchedEffect 在每次 recomposition 时启动动画
lifecycleOwner.lifecycle.addObserver(object : LifecycleEventObserver { LaunchedEffect(Unit) {
override fun onStateChanged(source: LifecycleOwner, event: Lifecycle.Event) { coroutineScope.launch {
when (event) {
Lifecycle.Event.ON_RESUME -> {
coroutineScope.launch { // 在 coroutineScope 中启动协程
animateImageWall(imageList1, offset1, speed = 1f, resources = resources) { offset1 = it } animateImageWall(imageList1, offset1, speed = 1f, resources = resources) { offset1 = it }
} }
coroutineScope.launch { coroutineScope.launch {
@@ -258,15 +243,6 @@ fun MovingImageWall(resources: Resources) {
animateImageWall(imageList3, offset3, speed = 2f, resources = resources) { offset3 = it } animateImageWall(imageList3, offset3, speed = 2f, resources = resources) { offset3 = it }
} }
} }
Lifecycle.Event.ON_PAUSE -> {
// 可选: 在Composable暂停时取消协程
// coroutineScope.cancel()
}
else -> {}
}
}
})
}
Box( Box(
modifier = Modifier modifier = Modifier