fix:修复二级菜单手势滑动高度变化滞后与Tab高亮闪烁问题
This commit is contained in:
@@ -87,6 +87,7 @@ internal fun HeaderFooterPage(
|
|||||||
)
|
)
|
||||||
val pagerState = rememberPagerState(pageCount = { 3 })
|
val pagerState = rememberPagerState(pageCount = { 3 })
|
||||||
var selectedTab by remember { mutableIntStateOf(0) }
|
var selectedTab by remember { mutableIntStateOf(0) }
|
||||||
|
var clickScrollCount by remember { mutableIntStateOf(0) }
|
||||||
|
|
||||||
val pageHeights = remember { mutableStateMapOf<Int, Int>() }
|
val pageHeights = remember { mutableStateMapOf<Int, Int>() }
|
||||||
val animatedHeight by rememberPagerAnimatedHeight(pagerState, pageHeights)
|
val animatedHeight by rememberPagerAnimatedHeight(pagerState, pageHeights)
|
||||||
@@ -183,7 +184,11 @@ internal fun HeaderFooterPage(
|
|||||||
}
|
}
|
||||||
|
|
||||||
LaunchedEffect(pagerState) {
|
LaunchedEffect(pagerState) {
|
||||||
snapshotFlow { pagerState.settledPage }.collect { selectedTab = it }
|
snapshotFlow { pagerState.currentPage }.collect { page ->
|
||||||
|
if (clickScrollCount == 0) {
|
||||||
|
selectedTab = page
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
@@ -195,11 +200,16 @@ internal fun HeaderFooterPage(
|
|||||||
selectedTabIndex = selectedTab,
|
selectedTabIndex = selectedTab,
|
||||||
onTabSelected = { index ->
|
onTabSelected = { index ->
|
||||||
selectedTab = index
|
selectedTab = index
|
||||||
|
clickScrollCount++
|
||||||
scope.launch {
|
scope.launch {
|
||||||
pagerState.animateScrollToPage(
|
try {
|
||||||
page = index,
|
pagerState.animateScrollToPage(
|
||||||
animationSpec = tween(durationMillis = 300, easing = FastOutSlowInEasing)
|
page = index,
|
||||||
)
|
animationSpec = tween(durationMillis = 300, easing = FastOutSlowInEasing)
|
||||||
|
)
|
||||||
|
} finally {
|
||||||
|
clickScrollCount = (clickScrollCount - 1).coerceAtLeast(0)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
modifier = Modifier.padding(start = 16.dp, end = 16.dp, bottom = 8.dp),
|
modifier = Modifier.padding(start = 16.dp, end = 16.dp, bottom = 8.dp),
|
||||||
|
|||||||
@@ -108,6 +108,7 @@ internal fun SystemMenuPage(
|
|||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
val pagerState = rememberPagerState(pageCount = { 3 })
|
val pagerState = rememberPagerState(pageCount = { 3 })
|
||||||
var selectedTab by remember { mutableIntStateOf(0) }
|
var selectedTab by remember { mutableIntStateOf(0) }
|
||||||
|
var clickScrollCount by remember { mutableIntStateOf(0) }
|
||||||
|
|
||||||
val pageHeights = remember { mutableStateMapOf<Int, Int>() }
|
val pageHeights = remember { mutableStateMapOf<Int, Int>() }
|
||||||
val animatedHeight by rememberPagerAnimatedHeight(pagerState, pageHeights)
|
val animatedHeight by rememberPagerAnimatedHeight(pagerState, pageHeights)
|
||||||
@@ -119,7 +120,11 @@ internal fun SystemMenuPage(
|
|||||||
var showIconSheet by remember { mutableStateOf(false) }
|
var showIconSheet by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
LaunchedEffect(pagerState) {
|
LaunchedEffect(pagerState) {
|
||||||
snapshotFlow { pagerState.settledPage }.collect { selectedTab = it }
|
snapshotFlow { pagerState.currentPage }.collect { page ->
|
||||||
|
if (clickScrollCount == 0) {
|
||||||
|
selectedTab = page
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
@@ -135,11 +140,16 @@ internal fun SystemMenuPage(
|
|||||||
selectedTabIndex = selectedTab,
|
selectedTabIndex = selectedTab,
|
||||||
onTabSelected = { index ->
|
onTabSelected = { index ->
|
||||||
selectedTab = index
|
selectedTab = index
|
||||||
|
clickScrollCount++
|
||||||
scope.launch {
|
scope.launch {
|
||||||
pagerState.animateScrollToPage(
|
try {
|
||||||
page = index,
|
pagerState.animateScrollToPage(
|
||||||
animationSpec = tween(durationMillis = 300, easing = FastOutSlowInEasing)
|
page = index,
|
||||||
)
|
animationSpec = tween(durationMillis = 300, easing = FastOutSlowInEasing)
|
||||||
|
)
|
||||||
|
} finally {
|
||||||
|
clickScrollCount = (clickScrollCount - 1).coerceAtLeast(0)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
modifier = Modifier.padding(start = 16.dp, end = 16.dp, bottom = 8.dp),
|
modifier = Modifier.padding(start = 16.dp, end = 16.dp, bottom = 8.dp),
|
||||||
|
|||||||
@@ -79,9 +79,14 @@ fun ReadStyleTextTitleContent(
|
|||||||
)
|
)
|
||||||
val pagerState = rememberPagerState(pageCount = { 3 })
|
val pagerState = rememberPagerState(pageCount = { 3 })
|
||||||
var selectedTab by remember { mutableIntStateOf(0) }
|
var selectedTab by remember { mutableIntStateOf(0) }
|
||||||
|
var clickScrollCount by remember { mutableIntStateOf(0) }
|
||||||
|
|
||||||
LaunchedEffect(pagerState) {
|
LaunchedEffect(pagerState) {
|
||||||
snapshotFlow { pagerState.settledPage }.collect { selectedTab = it }
|
snapshotFlow { pagerState.currentPage }.collect { page ->
|
||||||
|
if (clickScrollCount == 0) {
|
||||||
|
selectedTab = page
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
ReadStyleTextTitleContent(
|
ReadStyleTextTitleContent(
|
||||||
@@ -95,11 +100,16 @@ fun ReadStyleTextTitleContent(
|
|||||||
onOpenTitleFontSelect = onOpenTitleFontSelect,
|
onOpenTitleFontSelect = onOpenTitleFontSelect,
|
||||||
animateToPage = { page ->
|
animateToPage = { page ->
|
||||||
selectedTab = page
|
selectedTab = page
|
||||||
|
clickScrollCount++
|
||||||
scope.launch {
|
scope.launch {
|
||||||
pagerState.animateScrollToPage(
|
try {
|
||||||
page = page,
|
pagerState.animateScrollToPage(
|
||||||
animationSpec = tween(durationMillis = 300, easing = FastOutSlowInEasing)
|
page = page,
|
||||||
)
|
animationSpec = tween(durationMillis = 300, easing = FastOutSlowInEasing)
|
||||||
|
)
|
||||||
|
} finally {
|
||||||
|
clickScrollCount = (clickScrollCount - 1).coerceAtLeast(0)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
@@ -144,25 +154,28 @@ internal fun ReadStyleTextTitleContent(
|
|||||||
.clipToBounds()
|
.clipToBounds()
|
||||||
.pagerHeight(animatedHeight),
|
.pagerHeight(animatedHeight),
|
||||||
) { page ->
|
) { page ->
|
||||||
val pageModifier = Modifier.onSizeChanged { size ->
|
Box(
|
||||||
pageHeights[page] = size.height
|
modifier = Modifier
|
||||||
}
|
.fillMaxWidth()
|
||||||
when (page) {
|
.onSizeChanged { size ->
|
||||||
0 -> TextEffectsPage(
|
pageHeights[page] = size.height
|
||||||
onOpenShadowSet = onOpenShadowSet,
|
}
|
||||||
onOpenUnderlineConfig = onOpenUnderlineConfig,
|
) {
|
||||||
onOpenHighlightRule = onOpenHighlightRule,
|
when (page) {
|
||||||
onOpenFontSelect = onOpenFontSelect,
|
0 -> TextEffectsPage(
|
||||||
modifier = pageModifier,
|
onOpenShadowSet = onOpenShadowSet,
|
||||||
onIntent = onIntent,
|
onOpenUnderlineConfig = onOpenUnderlineConfig,
|
||||||
)
|
onOpenHighlightRule = onOpenHighlightRule,
|
||||||
|
onOpenFontSelect = onOpenFontSelect,
|
||||||
|
onIntent = onIntent,
|
||||||
|
)
|
||||||
|
|
||||||
1 -> LayoutSpacingPage(modifier = pageModifier, onIntent = onIntent)
|
1 -> LayoutSpacingPage(onIntent = onIntent)
|
||||||
2 -> TitleSettingsPage(
|
2 -> TitleSettingsPage(
|
||||||
onOpenTitleFontSelect = onOpenTitleFontSelect,
|
onOpenTitleFontSelect = onOpenTitleFontSelect,
|
||||||
modifier = pageModifier,
|
onIntent = onIntent,
|
||||||
onIntent = onIntent,
|
)
|
||||||
)
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -181,11 +194,10 @@ internal fun LayoutSpacingPage(
|
|||||||
var indentCount by remember { mutableIntStateOf(ReadBookConfig.paragraphIndent.length) }
|
var indentCount by remember { mutableIntStateOf(ReadBookConfig.paragraphIndent.length) }
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(horizontal = 16.dp)
|
.padding(horizontal = 16.dp)
|
||||||
.verticalScroll(rememberScrollState())
|
.verticalScroll(rememberScrollState()),
|
||||||
.then(modifier),
|
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = stringResource(R.string.read_config_body_spacing),
|
text = stringResource(R.string.read_config_body_spacing),
|
||||||
@@ -255,11 +267,10 @@ internal fun TextEffectsPage(
|
|||||||
var colorPickerInitial by remember { mutableIntStateOf(0) }
|
var colorPickerInitial by remember { mutableIntStateOf(0) }
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(horizontal = 16.dp)
|
.padding(horizontal = 16.dp)
|
||||||
.verticalScroll(rememberScrollState())
|
.verticalScroll(rememberScrollState()),
|
||||||
.then(modifier),
|
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = stringResource(R.string.text_typeface),
|
text = stringResource(R.string.text_typeface),
|
||||||
@@ -421,11 +432,10 @@ internal fun TitleSettingsPage(
|
|||||||
)
|
)
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier
|
modifier = modifier
|
||||||
.fillMaxWidth()
|
.fillMaxWidth()
|
||||||
.padding(horizontal = 16.dp)
|
.padding(horizontal = 16.dp)
|
||||||
.verticalScroll(rememberScrollState())
|
.verticalScroll(rememberScrollState()),
|
||||||
.then(modifier),
|
|
||||||
) {
|
) {
|
||||||
TinyDropdownSettingItem(
|
TinyDropdownSettingItem(
|
||||||
title = stringResource(R.string.body_title),
|
title = stringResource(R.string.body_title),
|
||||||
|
|||||||
Reference in New Issue
Block a user