Android SeekBar setOnSeekBarChangeListener

Je m'interroge sur le comportement de l'androïde SeekBars OnSeekBarChangeListener. En particulier, la méthode onProgressChanged n'est-elle notifiée que pour la première et la dernière modification du seekbar?

j'essaye de rafraîchir un TextView qui devrait montrer la progression actuelle du SeekBar. Mais le TextView n'est mis à jour que sur first touch et last touch. Déboguer ceci confirme mon hypothèse que cette méthode est appelée seulement deux fois: (ce que je voudrais avoir est que le TextView montre chaque changement de progrès dans le SeekBar.

En bref: je suis à la recherche d'une possibilité d'obtenir un progrès auditeur, qui est appelée pour chaque petit progrès changement.

32
demandé sur l.vasilev 2012-01-22 00:02:44

5 réponses

j'espère que cela va vous aider:

final TextView t1=new TextView(this); 
t1.setText("Hello Android");        
    final SeekBar sk=(SeekBar) findViewById(R.id.seekBar1);     
    sk.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {       

    @Override       
    public void onStopTrackingTouch(SeekBar seekBar) {      
        // TODO Auto-generated method stub      
    }       

    @Override       
    public void onStartTrackingTouch(SeekBar seekBar) {     
        // TODO Auto-generated method stub      
    }       

    @Override       
    public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {     
        // TODO Auto-generated method stub      

        t1.setTextSize(progress);
        Toast.makeText(getApplicationContext(), String.valueOf(progress),Toast.LENGTH_LONG).show();

    }       
});             
70
répondu Balaji Gunasekar 2015-05-10 13:28:48

onProgressChanged () doit être appelé à chaque changement de progression, pas seulement sur la première et la dernière touche (c'est pourquoi vous avez les méthodes onStartTrackingTouch() et onStopTrackingTouch ()).

assurez-vous que votre SeekBar ont plus de 1 Valeur, c'est-à-dire votre MAX > =3.

Dans votre onCreate:

 yourSeekBar=(SeekBar) findViewById(R.id.yourSeekBar);
 yourSeekBar.setOnSeekBarChangeListener(new yourListener());

votre interlocuteur:

private class yourListener implements SeekBar.OnSeekBarChangeListener {

        public void onProgressChanged(SeekBar seekBar, int progress,
                boolean fromUser) {
                            // Log the progress
            Log.d("DEBUG", "Progress is: "+progress);
                            //set textView's text
            yourTextView.setText(""+progress);
        }

        public void onStartTrackingTouch(SeekBar seekBar) {}

        public void onStopTrackingTouch(SeekBar seekBar) {}

    }

s'il vous plaît partagez un peu de code et les résultats du journal pour plus d'aide.

11
répondu GalDude33 2012-01-21 22:40:23

onProgressChanged est appelé chaque fois que vous déplacez le curseur.

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
    textView.setText(String.valueOf(new Integer(progress)));        
}

ainsi textView devrait montrer la progression et modifier toujours si le seekbar est déplacé.

4
répondu EarlOfEgo 2012-01-21 22:35:28

outrepasser toutes les méthodes

    @Override
    public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {


    }

    @Override
    public void onStartTrackingTouch(SeekBar arg0) {


    }

    @Override
    public void onStopTrackingTouch(SeekBar arg0) {


    }
2
répondu Sajan 2014-05-06 15:15:07

toutes les réponses sont correctes, mais vous avez besoin de convertir un grand nombre de graisse en une minuterie d'abord:

    public String toTimer(long milliseconds){
    String finalTimerString = "";
    String secondsString;
    // Convert total duration into time
    int hours = (int)( milliseconds / (1000*60*60));
    int minutes = (int)(milliseconds % (1000*60*60)) / (1000*60);
    int seconds = (int) ((milliseconds % (1000*60*60)) % (1000*60) / 1000);
    // Add hours if there
    if(hours > 0){
        finalTimerString = hours + ":";
    }
    // Prepending 0 to seconds if it is one digit
    if(seconds < 10){
        secondsString = "0" + seconds;
    }else{
        secondsString = "" + seconds;}
    finalTimerString = finalTimerString + minutes + ":" + secondsString;
    // return timer string
    return finalTimerString;
}

Et c'est la façon dont vous l'utiliser:

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
textView.setText(String.format("%s", toTimer(progress)));        
}
2
répondu S.R 2017-06-06 01:23:14