Pertemuan 4 - Aplikasi Dice Roller
Membuat aplikasi dice roller dengan menerapkan upload dan import file di res/drawable, memanfaatkan komponen button, state, dan mutable state
Kode:
package com.example.diceroller // Sesuaikan dengan nama package project-mu
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.material3.Button
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
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.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.example.diceroller.ui.theme.DiceRollerTheme
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContent {
DiceRollerTheme {
// Scaffold menangani padding sistem agar tidak tertutup status bar HP Infinix
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->
DiceRollerApp(
modifier = Modifier
.padding(innerPadding)
.fillMaxSize()
.wrapContentSize(Alignment.Center)
)
}
}
}
}
}
@Composable
fun DiceRollerApp(modifier: Modifier = Modifier) {
// Memanggil fungsi utama Dice Roller
DiceWithButtonAndImage(modifier = modifier)
}
@Composable
fun DiceWithButtonAndImage(modifier: Modifier = Modifier) {
// State untuk menyimpan hasil kocokan dadu
var result by remember { mutableStateOf(1) }
// Menentukan resource gambar berdasarkan nilai state 'result'
val imageResource = when (result) {
1 -> R.drawable.dice_1
2 -> R.drawable.dice_2
3 -> R.drawable.dice_3
4 -> R.drawable.dice_4
5 -> R.drawable.dice_5
else -> R.drawable.dice_6
}
Column(
modifier = modifier,
horizontalAlignment = Alignment.CenterHorizontally
) {
// Menampilkan gambar dadu
Image(
painter = painterResource(id = imageResource),
contentDescription = "Dice result: $result"
)
// Memberikan jarak antara gambar dan tombol
Spacer(modifier = Modifier.height(16.dp))
// Tombol untuk merubah state 'result' secara acak
Button(onClick = { result = (1..6).random() }) {
Text(text = "Roll", fontSize = 24.sp)
}
}
}
@Preview(showBackground = true)
@Composable
fun DiceRollerPreview() {
DiceRollerTheme {
DiceRollerApp()
}
}
Hasil:
Komentar
Posting Komentar