Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 13584f0

Browse files
add Mutex and Animatable sample
1 parent 1a657aa commit 13584f0

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
package com.smarttoolfactory.tutorial1_1basics.chapter9_animation
2+
3+
import androidx.compose.animation.core.Animatable
4+
import androidx.compose.animation.core.LinearEasing
5+
import androidx.compose.animation.core.tween
6+
import androidx.compose.foundation.MutatorMutex
7+
import androidx.compose.foundation.layout.Column
8+
import androidx.compose.foundation.layout.fillMaxSize
9+
import androidx.compose.foundation.layout.fillMaxWidth
10+
import androidx.compose.foundation.layout.padding
11+
import androidx.compose.material3.Button
12+
import androidx.compose.material3.Text
13+
import androidx.compose.runtime.Composable
14+
import androidx.compose.runtime.remember
15+
import androidx.compose.runtime.rememberCoroutineScope
16+
import androidx.compose.ui.Modifier
17+
import androidx.compose.ui.tooling.preview.Preview
18+
import androidx.compose.ui.unit.dp
19+
import androidx.compose.ui.unit.sp
20+
import kotlinx.coroutines.CancellationException
21+
import kotlinx.coroutines.launch
22+
import kotlinx.coroutines.sync.Mutex
23+
import kotlinx.coroutines.sync.withLock
24+
25+
@Preview
26+
@Composable
27+
fun CoroutinesTest() {
28+
29+
val mutex = remember {
30+
Mutex()
31+
}
32+
33+
val mutatorMutex = remember {
34+
MutatorMutex()
35+
}
36+
37+
38+
val scope = rememberCoroutineScope()
39+
40+
val animatable = remember {
41+
Animatable(0f)
42+
}
43+
44+
Column(
45+
modifier = Modifier.fillMaxSize().padding(24.dp)
46+
) {
47+
48+
Text(
49+
"Value: ${animatable.value.toInt()}", fontSize = 26.sp
50+
)
51+
52+
Button(
53+
modifier = Modifier.fillMaxWidth(),
54+
onClick = {
55+
scope.launch {
56+
mutex.withLock {
57+
animatable.snapTo(0f)
58+
try {
59+
animatable.animateTo(
60+
targetValue = 100f,
61+
animationSpec = tween(5000, easing = LinearEasing)
62+
)
63+
} catch (e: CancellationException) {
64+
println("Exception: ${e.message}")
65+
}
66+
}
67+
}
68+
}
69+
) {
70+
Text("Start with Mutex")
71+
}
72+
73+
Button(
74+
modifier = Modifier.fillMaxWidth(),
75+
onClick = {
76+
scope.launch {
77+
animatable.snapTo(0f)
78+
try {
79+
animatable.animateTo(
80+
targetValue = 100f,
81+
animationSpec = tween(5000, easing = LinearEasing)
82+
)
83+
} catch (e: CancellationException) {
84+
println("Exception: $e")
85+
}
86+
}
87+
}
88+
) {
89+
Text("Start")
90+
}
91+
92+
Button(
93+
modifier = Modifier.fillMaxWidth(),
94+
onClick = {
95+
96+
scope.launch {
97+
try {
98+
mutatorMutex.mutate {
99+
animatable.snapTo(0f)
100+
try {
101+
animatable.animateTo(
102+
targetValue = 100f,
103+
animationSpec = tween(5000, easing = LinearEasing)
104+
)
105+
} catch (e: CancellationException) {
106+
println("Exception: $e")
107+
}
108+
}
109+
}catch (e: Exception){
110+
println("MutatorMutexException: $e")
111+
}
112+
}
113+
}
114+
) {
115+
Text("Start with Mutex")
116+
}
117+
118+
}
119+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /