Je veux que la progression de SeekBar
change chaque fois que je clique sur un bouton. Utiliser setProgress()
ne fonctionne que pour la valeur initiale. Cela génère une erreur si je l'utilise après quelques modifications.
Peut-être devriez-vous essayer d'utiliser un gestionnaire? J'utilise cela dans une de mes applications et fonctionne bien.
1) Lors de la création de votre SeekBar:
// ...
seekBarHandler = new Handler(); // must be created in the same thread that created the SeekBar
seekBar = (SeekBar) findViewById(R.id.my_seekbar);
// you should define max in xml, but if you need to do this by code, you must set max as 0 and then your desired value. this is because a bug in SeekBar (issue 12945) (don't really checked if it was corrected)
seekBar.setMax(0);
seekBar.setMax(max);
seekBar.setProgress(progress);
// ...
2) Lorsque votre bouton est cliqué
// ...
seekBarHandler.post(new Runnable() {
@Override
public void run() {
if (seekBar != null) {
seekBar.setMax(0);
seekBar.setMax(max);
seekBar.setProgress(newProgress);
}
}
});
// ...
Vous pouvez aussi utiliser :
mSeekBar.refreshDrawableState();
après avoir défini les progrès.
Vous devez appeler setOnSeekbarChangeListener()
sur votre objet seekbar et laisser, par exemple, votre activité implémenter OnSeekbarChangeListener()
. Cette fonction vous permet de faire ce que vous voulez.
La solution qui fonctionne pour moi:
mSeekbaBar.setProgress(progress);
mSeekbaBar.post(new Runnable() {
@Override
public void run() {
mSeekbaBar.setProgress(progress);
}
});
Il supprime le clignotement du pouce
Essaye ça :
seekBar.setMax(50);
seekBar.setProgress(22);
au lieu de :
seekBar.setProgress(22);
seekBar.setMax(50);
Si vous définissez d'abord la valeur maximale au maximum, la barre SeekBar peut avoir une idée des progrès réellement accomplis lorsque vous définissez progressValue.
Cela a fait une différence pour moi lorsque je voulais une valeur par défaut pour ma barre de progression
De toute façon, en tant que bibliothèque de support 28.0.0, je peux définir les progrès simplement comme ceci
mySeekBar.setProgress(17);
et la position est mise à jour sans problème.