修复首次启动切换年视图无动画的问题
始终组合年视图 HorizontalPager 层(通过 graphicsLayer.alpha=0 隐藏), 避免首次进入时 Pager 组合延迟导致动画首帧丢失。
This commit is contained in:
parent
142d0c235a
commit
216ebbf990
@ -270,47 +270,45 @@ fun CalendarMonthView(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 年视图层:HorizontalPager 支持左右滑动切年
|
// 年视图层:始终组合以避免首次进入时的组合延迟导致动画丢失
|
||||||
if (viewModel.isYearView || yearProgress > 0.01f) {
|
HorizontalPager(
|
||||||
HorizontalPager(
|
state = yearPagerState,
|
||||||
state = yearPagerState,
|
beyondViewportPageCount = 1,
|
||||||
beyondViewportPageCount = 1,
|
flingBehavior = PagerDefaults.flingBehavior(state = yearPagerState),
|
||||||
flingBehavior = PagerDefaults.flingBehavior(state = yearPagerState),
|
modifier = Modifier
|
||||||
modifier = Modifier
|
.fillMaxSize()
|
||||||
.fillMaxSize()
|
.graphicsLayer {
|
||||||
.graphicsLayer {
|
scaleX = yearScale
|
||||||
scaleX = yearScale
|
scaleY = yearScale
|
||||||
scaleY = yearScale
|
alpha = yearAlpha
|
||||||
alpha = yearAlpha
|
transformOrigin = TransformOrigin(anchorPivotX, anchorPivotY)
|
||||||
transformOrigin = TransformOrigin(anchorPivotX, anchorPivotY)
|
}
|
||||||
|
.padding(horizontal = HORIZONTAL_PADDING_DP.dp)
|
||||||
|
) { page ->
|
||||||
|
val pageYear = viewModel.selectedDate.year + (page - START_PAGE)
|
||||||
|
YearGridView(
|
||||||
|
year = pageYear,
|
||||||
|
selectedMonth = if (pageYear == currentYear) currentMonth else 0,
|
||||||
|
today = today,
|
||||||
|
onMonthClick = { month ->
|
||||||
|
viewModel.selectMonthFromYearView(month)
|
||||||
|
@Suppress("DEPRECATION") // monthNumber 无替代 API
|
||||||
|
val targetPage = yearMonthToPage(
|
||||||
|
viewModel.yearViewYear, month,
|
||||||
|
today.year, today.month.number
|
||||||
|
)
|
||||||
|
if (targetPage != pagerState.currentPage) {
|
||||||
|
coroutineScope.launch { pagerState.scrollToPage(targetPage) }
|
||||||
}
|
}
|
||||||
.padding(horizontal = HORIZONTAL_PADDING_DP.dp)
|
},
|
||||||
) { page ->
|
onYearChange = { newYear ->
|
||||||
val pageYear = viewModel.selectedDate.year + (page - START_PAGE)
|
val offset = newYear - pageYear
|
||||||
YearGridView(
|
val targetPage = yearPagerState.currentPage + offset
|
||||||
year = pageYear,
|
if (targetPage != yearPagerState.currentPage) {
|
||||||
selectedMonth = if (pageYear == currentYear) currentMonth else 0,
|
coroutineScope.launch { yearPagerState.animateScrollToPage(targetPage) }
|
||||||
today = today,
|
|
||||||
onMonthClick = { month ->
|
|
||||||
viewModel.selectMonthFromYearView(month)
|
|
||||||
@Suppress("DEPRECATION") // monthNumber 无替代 API
|
|
||||||
val targetPage = yearMonthToPage(
|
|
||||||
viewModel.yearViewYear, month,
|
|
||||||
today.year, today.month.number
|
|
||||||
)
|
|
||||||
if (targetPage != pagerState.currentPage) {
|
|
||||||
coroutineScope.launch { pagerState.scrollToPage(targetPage) }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onYearChange = { newYear ->
|
|
||||||
val offset = newYear - pageYear
|
|
||||||
val targetPage = yearPagerState.currentPage + offset
|
|
||||||
if (targetPage != yearPagerState.currentPage) {
|
|
||||||
coroutineScope.launch { yearPagerState.animateScrollToPage(targetPage) }
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
)
|
}
|
||||||
}
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
// BottomCard:年视图时隐藏
|
// BottomCard:年视图时隐藏
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user