studio personalizado onprogresschanged discrete custom color android seekbar

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.