Android SeekBar setOnSeekBarChangeListener
Me pregunto sobre el comportamiento de la androide SeekBars OnSeekBarChangeListener. ¿Es correcto que el método onProgressChanged reciba una notificación para el primer toque en el buscador y en el último toque en el buscador?
Estoy intentando refrescar un TextView que debe demostrar el progreso actual del SeekBar. Sin embargo, el TextView se actualiza sólo en el primer toque y último toque. Depurar esto confirma mi suposición, el método se llama dos veces 🙁 Lo que me gustaría tener es que el TextView muestra cada cambio de progreso en el SeekBar.
- Barra de búsqueda personalizada (tamaño del pulgar, color y fondo)
- ¿Cómo cancelo un movimiento de "arrastrar" en un Seekbar de Android?
- Cómo solucionar los problemas de seekbar-bar-thumb-centering
- Cómo Incrementar el valor de barra Seek
- Cómo agregar textos de intervalos en un buscador
En resumen: Estoy buscando una posibilidad para obtener un oyente de progreso que se llama para cada pequeño cambio de progreso.
- Android ProgressBar.setProgressDrawable sólo funciona una vez?
- Establecer el color de progreso de SeekBar a transparente
- Android SeekBar volteado horizontalmente
- Creación de una ventana de posición de SeekBar en Android
- Cómo obtener el valor de paso seleccionado en android-comboseekbar-master
- SeekBar mediante programación
- Android - punto de partida de SeekBar
- Android seekbar con pulgar personalizado con texto dinámico dentro de él
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(); } });
OnProgressChanged () debe ser llamado en cada progreso cambiado, no sólo en el primer y último toque (por eso tienes los métodos onStartTrackingTouch () y onStopTrackingTouch ()).
Asegúrese de que su SeekBar tiene más de 1 valor, es decir, su MAX> = 3.
En su onCreate:
yourSeekBar=(SeekBar) findViewById(R.id.yourSeekBar); yourSeekBar.setOnSeekBarChangeListener(new yourListener());
Su 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 algunos códigos y los resultados de Log para más ayuda.
OnProgressChanged se llama cada vez que mueve el cursor.
@Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { textView.setText(String.valueOf(new Integer(progress))); }
Así que textView debe mostrar el progreso y alterar siempre si el buscador se está moviendo.
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) { }
Todas las respuestas son correctas, pero es necesario convertir primero 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))); }