5 enero, 2025
Aprende a desarrollar una ruleta interactiva en tu aplicación Android con animaciones fluidas, efectos de sonido, y selección aleatoria. En este tutorial, exploraremos cómo implementar una ruleta personalizada que mejora la experiencia del usuario utilizando Kotlin, MediaPlayer, y animacio
Suscríbete a nuestro canal en Youtube
SuscríbirseEn este post, vamos a explorar cómo construir una ruleta animada en una aplicación Android, utilizando Kotlin. La ruleta gira al presionar un botón, y al detenerse, selecciona aleatoriamente un jugador basado en un rango asociado a diferentes sectores.
Aquí está el código detallado del archivo MainActivity.kt
:
package android.desde.cero.ruleta
import android.media.MediaPlayer
import android.os.Bundle
import android.util.Log
import android.view.animation.Animation
import android.view.animation.DecelerateInterpolator
import android.view.animation.RotateAnimation
import android.widget.Button
import android.widget.ImageView
import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
class MainActivity : AppCompatActivity() {
var mediaPlayer: MediaPlayer? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_main)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
val ruleta = findViewById<ImageView>(R.id.ruleta)
val btn = findViewById<Button>(R.id.btn)
btn.setOnClickListener {
val random = java.util.Random()
val ran = random.nextInt(360) + 3600
var lngDegrees = 0
val animation = RotateAnimation(
lngDegrees.toFloat(),
(lngDegrees + ran).toFloat(),
Animation.RELATIVE_TO_SELF,
0.5f,
Animation.RELATIVE_TO_SELF,
0.5f
).apply {
duration = 3000
fillAfter = true
interpolator = DecelerateInterpolator()
}
lngDegrees = (lngDegrees + ran) % 360
animation.setAnimationListener(object : Animation.AnimationListener {
override fun onAnimationStart(animation: Animation?) {
mediaPlayer = MediaPlayer.create(this@MainActivity, R.raw.ic_audio)
mediaPlayer?.start()
}
override fun onAnimationEnd(animation: Animation?) {
mediaPlayer?.stop()
mediaPlayer?.release()
mediaPlayer = null
val partes = 12
val v = partes - Math.floor(lngDegrees / (360.0 / partes)).toInt()
val equipos_id = v
val (min, max) = when (equipos_id) {
1 -> 1 to 12
2 -> 13 to 24
3 -> 25 to 36
4 -> 37 to 48
5 -> 49 to 60
6 -> 61 to 72
7 -> 73 to 84
8 -> 85 to 96
9 -> 97 to 108
10 -> 109 to 120
11 -> 121 to 132
12 -> 123 to 144
else -> 1 to 144
}
val jugadores_id = random.nextInt(max - min + 1) + min
Log.d("JUGADOR", jugadores_id.toString())
}
override fun onAnimationRepeat(animation: Animation?) {}
})
ruleta.animation = animation
ruleta.startAnimation(animation)
}
}
override fun onDestroy() {
super.onDestroy()
mediaPlayer?.release()
mediaPlayer = null
}
}
La aplicación utiliza enableEdgeToEdge
para optimizar el diseño en dispositivos con barras de sistema modernas. El padding dinámico asegura que el contenido no quede oculto detrás de barras.
RotateAnimation
.3600 + 360
).MediaPlayer
para reproducir un archivo de audio (R.raw.ic_audio
).lngDegrees
) determina el sector.res/layout/activity_main.xml
que incluyen un ImageView
para la ruleta y un Button
.ic_audio.mp3
) en la carpeta res/raw
.duration
e interpolador para un efecto diferente.Con este proyecto, hemos construido una funcionalidad interactiva y visualmente atractiva para aplicaciones Android. 🚀 ¡Empieza a experimentar y personalizar tu propia ruleta!
Leido 111 veces | 0 usuarios
0 descargas
Para descargar el código crea una cuenta
Crear cuenta© Copyright Codea::App Cursos de Programación Online | LATAM | 2020 - 2024