João Rijo
João Rijo20/09/2022 20:40
Compartilhe

Ajuda - ProgressBar em Kotlin

  • #Kotlin
  • #Android

Boa noite!

Gente, estou fazendo um projetinho bem simples em um curso que estou fazendo, onde implementamos um app que sorteia numeros de 1 a 6 e mostra a face de um dado correspondente ao numero sorteado.

Para personalizar coloquei uma progressbar que é animada sempre que o botão é apertado e sorteado um novo numero.

O problema é que não consigo resetar a progressbar depois que é animada pela primeira vez, alguém pode me ajudar?

Já tentei

-> Alternar a visibilidade do componente (invisible, visible, gone)

-> setar o progress como zero depois de executada

e várias outras tentativas de fazer com que ele apareça só na hora de ser animada ou de voltar ao estado inicial depois da animação.

Alguém pode me ajudar? Agradeço desde já.

Meu código está no git, nesse link abaixo

https://github.com/BrunoRijo/DiceRoller

mas vou deixar aqui também a parte onde a progressbar é colocada na activity, e meu código main.

<com.mikhaellopez.circularprogressbar.CircularProgressBar
  android:id="@+id/circularProgressBar"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  app:cpb_background_progressbar_color="@color/GreenLight"
  app:cpb_background_progressbar_width="10dp"
  app:cpb_progress_direction="to_right"
  app:cpb_progressbar_color="@color/white"
  app:cpb_progressbar_width="10dp"
  app:cpb_progress_max="10"
  app:cpb_round_border="false"
  app:layout_constraintTop_toTopOf="parent"
  app:layout_constraintBottom_toBottomOf="parent"
  app:layout_constraintStart_toStartOf="parent"
  app:layout_constraintEnd_toEndOf="parent"/>

Classe main

package br.com.bruno.diceroller

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.os.PersistableBundle
import android.view.View
import androidx.core.view.isGone
import androidx.core.view.isVisible
import br.com.bruno.diceroller.databinding.ActivityMainBinding
import kotlin.random.Random

class MainActivity : AppCompatActivity() {

  private lateinit var binding : ActivityMainBinding

  override fun onCreate(savedInstanceState: Bundle?) {
      super.onCreate(savedInstanceState)
      binding = ActivityMainBinding.inflate(layoutInflater)
      setContentView(binding.root)

      binding.btnRollDice.setOnClickListener {
          animationBarProgress()
      }
  }

  private fun animationBarProgress(){
      resetProgressBar()
      binding.circularProgressBar.apply {
          setProgressWithAnimation(10f, 250)
      }
      rollDice()
  }

  private fun resetProgressBar() {
      binding.circularProgressBar.progress = 0f
  }

  private fun rollDice() {
      binding.imageDice.setImageResource(when(Random.nextInt(6)+1){
          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
      })
  }
}

https://linkedin.com/in/brunorijo - (Conecta lá)

Compartilhe
Comentários (1)
Leandro Silva
Leandro Silva - 20/09/2022 22:25

Geralmente "progressBar.visibility = View.GONE" resolve. Contudo, você está usando um componente de terceiros (Lopez Mikhael --> https://github.com/lopspower/CircularProgressBar), que por sua vez se baseou em outro projeto para fazer o dele (M. Reza Nasirloo --> https://github.com/MRezaNasirloo/CircularProgressBar).

image

Este último por sua vez criou o "CircularProgressBar" baseado numa View customizada. Não é baseado no "ProgressBar" nativo do Android (pelo que eu pude entender!). Você vai ter que dar uma olhada lá no GitHub do projeto para mais explicações.


Mesmo assim "binding.circularProgressBar.visibility = View.GONE" no fim de "rollDice()" deveria fazer sumir esta View.


private fun rollDice() {
      binding.imageDice.setImageResource(when(Random.nextInt(6)+1){
          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
      })

binding.circularProgressBar.visibility = View.GONE
  }

Boa sorte!