personalizado - seekbar discrete android studio
Android SeekBar setOnSeekBarChangeListener (5)
Me pregunto sobre el comportamiento del SeekBars de Android. Selector de barras de búsqueda. En particular, ¿se notifica el método onProgressChanged solo para el primer y el último toque en la barra de búsqueda?
Estoy tratando de actualizar un TextView que debería mostrar el progreso actual de SeekBar. Pero el TextView se acaba de actualizar con el primer toque y el último toque. Depurar esto confirma mi suposición de que este método se llama solo dos veces :( Lo que me gustaría tener es que TextView muestre cada cambio de progreso en SeekBar.
En resumen: estoy buscando la posibilidad de obtener un oyente progresivo que se llame para cada pequeño cambio de progreso.
Anular todos los métodos
@Override
public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {
}
@Override
public void onStartTrackingTouch(SeekBar arg0) {
}
@Override
public void onStopTrackingTouch(SeekBar arg0) {
}
Espero que esto ayude:
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();
}
});
Todas las respuestas son correctas, pero primero debe convertir un número grande de grasa en un temporizador:
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;
}
Y así es como lo usas:
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
textView.setText(String.format("%s", toTimer(progress)));
}
onProgressChanged () debe invocarse en cada progreso modificado, no solo en el primer y último toque (por eso tiene los métodos onStartTrackingTouch () y onStopTrackingTouch ()).
Asegúrese de que su SeekBar tenga más de 1 valor, es decir, su MAX> = 3.
En tu onCreate:
yourSeekBar=(SeekBar) findViewById(R.id.yourSeekBar);
yourSeekBar.setOnSeekBarChangeListener(new yourListener());
Tu oyente:
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) {}
}
Por favor comparta un código y los resultados de registro para obtener ayuda adicional.
onProgressChanged se invoca cada vez que mueva el cursor.
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
textView.setText(String.valueOf(new Integer(progress)));
}
entonces textView debería mostrar el progreso y alterar siempre si la barra de búsqueda se está moviendo.