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.
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();
}
});
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.
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é.
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) {
}
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)));
}