mirror of
https://github.com/Myzel394/NumberHub.git
synced 2025-06-20 01:05:26 +02:00
Animated swap units button
This commit is contained in:
parent
c7ed540c2e
commit
add22a8e3f
@ -18,6 +18,9 @@
|
|||||||
|
|
||||||
package com.sadellie.unitto.screens.main.components
|
package com.sadellie.unitto.screens.main.components
|
||||||
|
|
||||||
|
import androidx.compose.animation.core.FastOutSlowInEasing
|
||||||
|
import androidx.compose.animation.core.animateFloatAsState
|
||||||
|
import androidx.compose.animation.core.tween
|
||||||
import androidx.compose.foundation.layout.Arrangement
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.Row
|
import androidx.compose.foundation.layout.Row
|
||||||
@ -27,8 +30,14 @@ import androidx.compose.material.icons.outlined.SwapHoriz
|
|||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
import androidx.compose.material3.IconButton
|
import androidx.compose.material3.IconButton
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.getValue
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.runtime.setValue
|
||||||
|
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.draw.rotate
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import com.sadellie.unitto.R
|
import com.sadellie.unitto.R
|
||||||
@ -65,6 +74,12 @@ fun TopScreenPart(
|
|||||||
onUnitSelectionClick: (String) -> Unit,
|
onUnitSelectionClick: (String) -> Unit,
|
||||||
swapUnits: () -> Unit
|
swapUnits: () -> Unit
|
||||||
) {
|
) {
|
||||||
|
var swapped by remember { mutableStateOf(false) }
|
||||||
|
val swapButtonRotation: Float by animateFloatAsState(
|
||||||
|
targetValue = if (swapped) 0f else 180f,
|
||||||
|
animationSpec = tween(easing = FastOutSlowInEasing)
|
||||||
|
)
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
verticalArrangement = Arrangement.spacedBy(24.dp)
|
verticalArrangement = Arrangement.spacedBy(24.dp)
|
||||||
@ -96,11 +111,17 @@ fun TopScreenPart(
|
|||||||
label = unitFrom.displayName,
|
label = unitFrom.displayName,
|
||||||
isLoading = loadingDatabase
|
isLoading = loadingDatabase
|
||||||
)
|
)
|
||||||
IconButton({ swapUnits() }, enabled = !loadingDatabase) {
|
IconButton(
|
||||||
|
onClick = {
|
||||||
|
swapUnits()
|
||||||
|
swapped = !swapped
|
||||||
|
},
|
||||||
|
enabled = !loadingDatabase
|
||||||
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
Icons.Outlined.SwapHoriz, contentDescription = stringResource(
|
modifier = Modifier.rotate(swapButtonRotation),
|
||||||
id = R.string.swap_units_description
|
imageVector = Icons.Outlined.SwapHoriz,
|
||||||
)
|
contentDescription = stringResource(R.string.swap_units_description)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
UnitSelectionButton(
|
UnitSelectionButton(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user