Ejercicio: Contador de cafés en Kotlin

Ejemplo sobre la interfaz de usuario

Interfaz de usuario (punto 6 de la unidad 2 en HLC)

Layouts

Aplicación que permite programar una pausa en minutos para tomar un café y cuando termina cuenta los cafés tomados diariamente.

Lanza un contador descendente hasta un tiempo (en milisegundos) en el futuro, con notificaciones regulares cada cierto intervalo de tiempo (en milisegundos).

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal"
        android:padding="16dp">

        <TextView
            android:id="@+id/textView"
            android:layout_width="181dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/cafes"
            android:textAppearance="@style/TextAppearance.AppCompat.Large" />

        <TextView
            android:id="@+id/cuenta"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/cero"
            android:textAlignment="center"
            android:textAppearance="@style/TextAppearance.AppCompat.Large" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="163dp"
        android:layout_margin="16dp"
        android:gravity="center_vertical"
        android:orientation="horizontal">

        <Button
            android:id="@+id/botonMenos"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/menos" />

        <TextView
            android:id="@+id/tiempo"
            android:layout_width="171dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/cinco"
            android:textAlignment="center"
            android:textAppearance="@style/TextAppearance.AppCompat.Large"
            android:textColor="#14B2A3"
            android:textColorLink="#2196F3"
            android:textStyle="bold" />

        <Button
            android:id="@+id/botonMas"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/mas" />

    </LinearLayout>

    <Button
        android:id="@+id/botonComenzar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="16dp"
        android:text="@string/comenzar" />

</LinearLayout>

strings.xml

<resources>
    <string name="app_name">Contador</string>
    <string name="cafes">Cafés</string>
    <string name="cero">0</string>
    <string name="menos">-</string>
    <string name="cinco">5:00</string>
    <string name="mas">+</string>
    <string name="comenzar">Comenzar</string>
</resources>

Clase CountDownTimer

Ejemplo de uso:

inner class MyCountDownTimer(millisInFuture: Long, countDownInterval: Long : CountDownTimer(millisInFuture, countDownInterval) {
    
    override fun onTick(millisUntilFinished: Long) {
        // actualizar el tiempo en la etiqueta

    }

    override fun onFinish() {
        texto.setText("Pausa terminada!!")
        //  acciones al finalizar el contador descendente
        
    }
}

contadorDescendente = MyCountDownTimer((contador.obtenerTiempo() * 60 * 1000).toLong(), 1000)
contadorDescendente.start()

View Binding

en el fichero build.gradle se deben añadir estas líneas:

buildFeatures {
    viewBinding = true
}

Contador.kt

class Contador {
    private val DESCANSO = 5
    private var cafes: Int//número de cafés
    private var tiempo: Int // tiempo de la pausa en minutos

    constructor() {
        cafes = 0
        tiempo = DESCANSO
    }

    constructor(c: Int, t: Int) {
        cafes = c
        tiempo = t
    }

    fun aumentarTiempo(): String {
        tiempo += 1
        return tiempo.toString() + ":00"
    }

    fun disminuirTiempo(): String {
        tiempo -= 1
        if (tiempo < 1) tiempo = 1
        return tiempo.toString() + ":00"
    }

    fun obtenerTiempo(): Int {
        return tiempo
    }

    fun aumentarCafes(): String {
        cafes += 1
        return cafes.toString()
    }
}

MainActivity.kt

class MainActivity : AppCompatActivity(), View.OnClickListener {
    private lateinit var binding: ActivityMainBinding
    private lateinit var contador: Contador
    private lateinit var contadorDescendente: MyCountDownTimer
    private val PAUSA = 3
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // setContentView(R.layout.activity_main)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view: View = binding.root
        setContentView(view)






    }

    override fun onClick(view: View) {






    }

    inner class MyCountDownTimer(millisInFuture: Long, countDownInterval: Long) : CountDownTimer(millisInFuture, countDownInterval) {








    }
}

Subir el proyecto a un repositorio en Gitlab/Github

Ejercicio 1 de la tarea online de la unidad 2 en HLC

Deja una respuesta