Add click selection on the number picker.

This commit is contained in:
Thomas Andres Gomez 2023-10-07 18:15:53 +02:00
parent 81f71a9aec
commit 5e7be483e2
3 changed files with 12 additions and 3 deletions

View file

@ -3,6 +3,7 @@ package com.pixelized.rplexicon.ui.composable
import android.content.res.Configuration.UI_MODE_NIGHT_NO
import android.content.res.Configuration.UI_MODE_NIGHT_YES
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.height
@ -15,15 +16,16 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp
import androidx.compose.ui.util.lerp
import com.pixelized.rplexicon.ui.theme.LexiconTheme
import kotlinx.coroutines.launch
import kotlin.math.absoluteValue
@OptIn(ExperimentalFoundationApi::class)
@ -35,6 +37,7 @@ fun NumberPicker(
from: Int = 0,
pager: PagerState,
) {
val scope = rememberCoroutineScope()
VerticalPager(
modifier = Modifier
.height(height = itemSize * itemAmount)
@ -44,7 +47,9 @@ fun NumberPicker(
pageSize = PageSize.Fixed(itemSize),
) { index ->
Box(
modifier = Modifier.size(size = itemSize),
modifier = Modifier
.clickable { scope.launch { pager.animateScrollToPage(page = index) } }
.size(size = itemSize),
contentAlignment = Alignment.Center,
) {
Text(
@ -76,7 +81,7 @@ private fun NumberPickerPreview() {
LexiconTheme {
Surface {
NumberPicker(
pager = rememberPagerState(initialPage = 20) { 99 }
pager = rememberPagerState(initialPage = 20) { 99 },
)
}
}

View file

@ -18,6 +18,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.Stable
import androidx.compose.runtime.State
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
@ -44,6 +45,7 @@ fun HandleCounterEditDialog(
onConfirm: (String, Int) -> Unit,
) {
dialog.value?.let {
val scope = rememberCoroutineScope()
val pager = rememberPagerState(initialPage = it.value) { it.max + 1 }
Dialog(
properties = remember { DialogProperties(usePlatformDefaultWidth = false) },

View file

@ -22,6 +22,7 @@ import androidx.compose.runtime.Stable
import androidx.compose.runtime.State
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
@ -51,6 +52,7 @@ fun HandleHitPointEditDialog(
onConfirm: (hp: Int, extra: Int) -> Unit,
) {
dialog.value?.let {
val scope = rememberCoroutineScope()
val hpPager = rememberPagerState(initialPage = it.value) { it.max + 1 }
val extraPager = rememberPagerState(initialPage = it.extra) { 99 }
Dialog(