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_NO
import android.content.res.Configuration.UI_MODE_NIGHT_YES import android.content.res.Configuration.UI_MODE_NIGHT_YES
import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
@ -15,15 +16,16 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.graphics.graphicsLayer
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.DpSize
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.util.lerp import androidx.compose.ui.util.lerp
import com.pixelized.rplexicon.ui.theme.LexiconTheme import com.pixelized.rplexicon.ui.theme.LexiconTheme
import kotlinx.coroutines.launch
import kotlin.math.absoluteValue import kotlin.math.absoluteValue
@OptIn(ExperimentalFoundationApi::class) @OptIn(ExperimentalFoundationApi::class)
@ -35,6 +37,7 @@ fun NumberPicker(
from: Int = 0, from: Int = 0,
pager: PagerState, pager: PagerState,
) { ) {
val scope = rememberCoroutineScope()
VerticalPager( VerticalPager(
modifier = Modifier modifier = Modifier
.height(height = itemSize * itemAmount) .height(height = itemSize * itemAmount)
@ -44,7 +47,9 @@ fun NumberPicker(
pageSize = PageSize.Fixed(itemSize), pageSize = PageSize.Fixed(itemSize),
) { index -> ) { index ->
Box( Box(
modifier = Modifier.size(size = itemSize), modifier = Modifier
.clickable { scope.launch { pager.animateScrollToPage(page = index) } }
.size(size = itemSize),
contentAlignment = Alignment.Center, contentAlignment = Alignment.Center,
) { ) {
Text( Text(
@ -76,7 +81,7 @@ private fun NumberPickerPreview() {
LexiconTheme { LexiconTheme {
Surface { Surface {
NumberPicker( 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.Stable
import androidx.compose.runtime.State import androidx.compose.runtime.State
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@ -44,6 +45,7 @@ fun HandleCounterEditDialog(
onConfirm: (String, Int) -> Unit, onConfirm: (String, Int) -> Unit,
) { ) {
dialog.value?.let { dialog.value?.let {
val scope = rememberCoroutineScope()
val pager = rememberPagerState(initialPage = it.value) { it.max + 1 } val pager = rememberPagerState(initialPage = it.value) { it.max + 1 }
Dialog( Dialog(
properties = remember { DialogProperties(usePlatformDefaultWidth = false) }, 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.State
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@ -51,6 +52,7 @@ fun HandleHitPointEditDialog(
onConfirm: (hp: Int, extra: Int) -> Unit, onConfirm: (hp: Int, extra: Int) -> Unit,
) { ) {
dialog.value?.let { dialog.value?.let {
val scope = rememberCoroutineScope()
val hpPager = rememberPagerState(initialPage = it.value) { it.max + 1 } val hpPager = rememberPagerState(initialPage = it.value) { it.max + 1 }
val extraPager = rememberPagerState(initialPage = it.extra) { 99 } val extraPager = rememberPagerState(initialPage = it.extra) { 99 }
Dialog( Dialog(