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á)




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).
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.
Boa sorte!