Tugas 4: Membuat Aplikasi Dice Roller

Nama: Ken Anargya Alkausar

NRP: 5025211168

Kelas: PPB - A


Tugas 4: Membuat Aplikasi Dice Roller

Di artikel ini, saya akan menjelaskan bagaimana membuat aplikasi Dice Roller menggunakan Kotlin dan Jetpack Compose berdasarkan tutorial dari Codelab Android. Aplikasi ini akan memungkinkan pengguna untuk menekan tombol untuk melempar dadu secara acak, dan hasilnya akan ditampilkan dalam bentuk gambar dadu yang berbeda berdasarkan nilai angka yang keluar. Kita juga akan menambahkan animasi agar pengalaman pengguna menjadi lebih menarik.


MainActivity
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
DiceRollerTheme {
Surface(
modifier = Modifier.fillMaxSize(),
color = MaterialTheme.colorScheme.background
) {
DiceRollerApp()
}
}
}
}
}
Fungsi ini adalah titik awal aplikasi. Di sini, kita memanggil setContent untuk menampilkan antarmuka pengguna (UI) menggunakan DiceRollerTheme. Surface digunakan untuk mengatur latar belakang aplikasi dan memanggil fungsi DiceRollerApp, yang akan menampilkan konten utama aplikasi.

DiceRollerApp()
fun DiceRollerApp() {
DiceWithButtonAndImage(modifier = Modifier
.fillMaxSize()
.wrapContentSize(Alignment.Center)
)
}
Fungsi ini adalah fungsi @Composable yang bertanggung jawab untuk menampilkan elemen UI utama aplikasi. Di dalamnya, kita memanggil fungsi DiceWithButtonAndImage, yang menangani tampilan gambar dadu dan tombol untuk menggulirkan dadu. Fungsi ini juga menggunakan modifier untuk memastikan elemen UI ditempatkan di tengah layar.

DiceWithButtonAndImage()
fun DiceWithButtonAndImage(modifier: Modifier = Modifier) {
var result by remember { mutableStateOf(1) }
var rotationAngle by remember { mutableStateOf(0f) }

// Ukuran gambar dadu
val imageSize by remember { mutableStateOf(300.dp) }

var sizeMultiplier by remember { mutableStateOf(1f) }
val animatedSize by animateDpAsState(
targetValue = imageSize * sizeMultiplier,
animationSpec = tween(durationMillis = 500) // Durasi lebih halus
)

// Animasi untuk rotasi dadu
val animatedRotation by animateFloatAsState(
targetValue = rotationAngle,
animationSpec = tween(durationMillis = 500) // Durasi rotasi
)

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) {
// Gambar dice dengan animasi rotasi
Image(
painter = painterResource(imageResource),
contentDescription = result.toString(),
modifier = Modifier
.size(animatedSize)
.graphicsLayer(rotationZ = animatedRotation) // Menambahkan rotasi
)

Spacer(modifier = Modifier.height(16.dp))

Button(
onClick = {
result = (1..6).random()


sizeMultiplier = 1.5f


sizeMultiplier = 1f

// Rotasi acak pada dadu
rotationAngle += 720f // Mengubah sudut rotasi
},
) {
Text(text = stringResource(R.string.roll), fontSize = 26.sp)
}
}
}
Fungsi ini adalah komponen utama dalam aplikasi yang berfungsi untuk menampilkan tombol dan gambar dadu. Di dalamnya, kita mendeklarasikan beberapa state, seperti result untuk menyimpan hasil dadu, dan rotationAngle untuk mengelola rotasi gambar dadu. Fungsi ini juga mengatur animasi untuk gambar dadu, seperti perubahan ukuran dan rotasi, menggunakan animateDpAsState dan animateFloatAsState untuk memberikan efek halus. Ketika tombol ditekan, gambar dadu akan berubah sesuai dengan hasil acak yang dihasilkan, sambil menampilkan animasi rotasi.

Dokumentasi: 

Github: https://github.com/kenanargya/ppb_diceroller4

Referensi: 



Comments

Popular posts from this blog

Tugas 5: Membuat Aplikasi Kalkulator

Tugas 1: Review Perkembangan Teknologi Perangkat Bergerak

Tugas 6: Membuat Aplikasi Konversi Nilai Mata Uang