导航切换动画调整
将默认的淡入淡出动画效果替换为更接近iOS风格的侧滑动画,提升页面切换的流畅度和视觉体验。
**具体变更:**
* **页面进入:** 新页面从右侧滑入。
* **页面退出:** 当前页面向右侧滑出,前一页面从左侧轻微偏移处滑回。
* **动画时长:** 统一设置为280毫秒。
**影响范围:**
* 图片详情页 (`ImagePagerScreen`)
* 创建群聊页 (`CreateGroupChatScreen`)
**其他优化:**
* **创建群聊页UI调整:**
* 群聊名称输入框样式统一,采用圆角灰色背景。
* 底部创建按钮适配导航栏高度。
* 列表区域自适应填满剩余空间,防止内容被遮挡。
* 选择成员列表项固定高度,避免选中状态变化时布局跳动。
* 为头像和选择框添加默认图和占位图。
* **ImageLoader优化:**
* 实现全局共享的 `ImageLoader` 实例,避免重复创建,提高内存缓存利用率。
* **列表性能优化:**
* 为好友列表和AI助手列表的 `items` 添加 `key`,提升列表项更新效率。
* **资源清理调整:**
* 移除了在离开首页和动态页时全量清理资源的操作,以避免返回时列表重置或不必要的重新加载。
* **ProfileV3页代码清理:**
* 移除未使用的导入。
This commit is contained in:
@@ -8,6 +8,8 @@ import androidx.compose.animation.SharedTransitionLayout
|
||||
import androidx.compose.animation.core.tween
|
||||
import androidx.compose.animation.fadeIn
|
||||
import androidx.compose.animation.fadeOut
|
||||
import androidx.compose.animation.slideInHorizontally
|
||||
import androidx.compose.animation.slideOutHorizontally
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.WindowInsets
|
||||
import androidx.compose.foundation.layout.navigationBars
|
||||
@@ -163,16 +165,32 @@ fun NavigationController(
|
||||
navArgument("initImagePagerIndex") { type = NavType.IntType }
|
||||
),
|
||||
enterTransition = {
|
||||
fadeIn(animationSpec = tween(durationMillis = 200))
|
||||
// iOS push: new screen slides in from the right
|
||||
slideInHorizontally(
|
||||
initialOffsetX = { fullWidth -> fullWidth },
|
||||
animationSpec = tween(durationMillis = 280)
|
||||
)
|
||||
},
|
||||
exitTransition = {
|
||||
fadeOut(animationSpec = tween(durationMillis = 200))
|
||||
// iOS push: previous screen shifts slightly left (parallax)
|
||||
slideOutHorizontally(
|
||||
targetOffsetX = { fullWidth -> -fullWidth / 3 },
|
||||
animationSpec = tween(durationMillis = 280)
|
||||
)
|
||||
},
|
||||
popEnterTransition = {
|
||||
fadeIn(animationSpec = tween(durationMillis = 200))
|
||||
// iOS pop: previous screen slides back from slight left offset
|
||||
slideInHorizontally(
|
||||
initialOffsetX = { fullWidth -> -fullWidth / 3 },
|
||||
animationSpec = tween(durationMillis = 280)
|
||||
)
|
||||
},
|
||||
popExitTransition = {
|
||||
fadeOut(animationSpec = tween(durationMillis = 200))
|
||||
// iOS pop: current screen slides out to the right
|
||||
slideOutHorizontally(
|
||||
targetOffsetX = { fullWidth -> fullWidth },
|
||||
animationSpec = tween(durationMillis = 280)
|
||||
)
|
||||
}
|
||||
) { backStackEntry ->
|
||||
val id = backStackEntry.arguments?.getString("id")
|
||||
@@ -448,6 +466,30 @@ fun NavigationController(
|
||||
|
||||
composable(
|
||||
route = NavigationRoute.CreateGroupChat.route,
|
||||
enterTransition = {
|
||||
slideInHorizontally(
|
||||
initialOffsetX = { fullWidth -> fullWidth },
|
||||
animationSpec = tween(durationMillis = 280)
|
||||
)
|
||||
},
|
||||
exitTransition = {
|
||||
slideOutHorizontally(
|
||||
targetOffsetX = { fullWidth -> -fullWidth / 3 },
|
||||
animationSpec = tween(durationMillis = 280)
|
||||
)
|
||||
},
|
||||
popEnterTransition = {
|
||||
slideInHorizontally(
|
||||
initialOffsetX = { fullWidth -> -fullWidth / 3 },
|
||||
animationSpec = tween(durationMillis = 280)
|
||||
)
|
||||
},
|
||||
popExitTransition = {
|
||||
slideOutHorizontally(
|
||||
targetOffsetX = { fullWidth -> fullWidth },
|
||||
animationSpec = tween(durationMillis = 280)
|
||||
)
|
||||
}
|
||||
) {
|
||||
CreateGroupChatScreen()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user