Untitled
unknown
plain_text
2 years ago
4.8 kB
13
Indexable
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.gestures.detectDragGestures
import androidx.compose.foundation.layout.*
import androidx.compose.material.Button
import androidx.compose.material.Text
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.drawWithContent
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.graphics.drawscope.translate
import androidx.compose.ui.input.pointer.consumeAllChanges
import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.singleWindowApplication
fun main() = singleWindowApplication {
var result by remember { mutableStateOf("") }
val buttons = listOf("1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "+", "-", "*", "/", "=")
val points = remember { mutableStateListOf<Offset>() }
var pointerOffset by remember {
mutableStateOf(Offset(0f, 0f))
}
Column(
modifier = Modifier
.fillMaxSize()
.pointerInput("dragging") {
detectDragGestures { change, dragAmount ->
pointerOffset += dragAmount
}
}
.onSizeChanged {
pointerOffset = Offset(it.width / 2f, it.height / 2f)
}
.drawWithContent {
drawContent()
// draws a fully black area with a small keyhole at pointerOffset that’ll show part of the UI.
drawRect(
Brush.radialGradient(
listOf(Color.Transparent, Color.Black),
center = pointerOffset,
radius = 100.dp.toPx(),
)
)
}
) {
Row(modifier = Modifier.fillMaxSize()) {
Column(
modifier = Modifier.weight(1f),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
Text(text = "Result: $result")
Spacer(modifier = Modifier.height(16.dp))
buttons.chunked(4).forEach { row ->
Row {
row.forEach { button ->
Button(onClick = {
when (button) {
"=" -> result = try {
result.split(" ").let { if (it.size < 3) "" else it[0].toInt().let { first ->
it[2].toInt().let { second ->
when (it[1]) {
"+" -> (first + second).toString()
"-" -> (first - second).toString()
"*" -> (first * second).toString()
"/" -> if (second != 0) (first / second).toString() else "Error"
else -> ""
}
}
} }
} catch (e: Exception) {
"Error"
}
else -> result += if (button in listOf("+", "-", "*", "/")) " $button " else button
}
}) {
Text(text = button)
}
Spacer(modifier = Modifier.width(16.dp))
}
}
Spacer(modifier = Modifier.height(16.dp))
}
Button(onClick = { result = "" }) {
Text(text = "Clear")
}
}
/*Canvas(modifier = Modifier.weight(1f).fillMaxHeight().pointerInput(Unit) {
detectDragGestures { change, dragAmount ->
change.consumeAllChanges()
points.add(change.position)
}
}) {
points.forEach { point ->
drawCircle(color = Color.Black, center = point, radius = 1.dp.toPx(), style = Stroke())
}
}*/
}
}
}
Editor is loading...