2012-04-15 49 views
6

Como digo en el título, cuando uso setProgressDrawable, llena toda la SeekBar: si el progreso es 34%, el progreso muestra 100% pero el pulgar muestra el porcentaje correcto 34%. No entender por qué puede ser el problema ...setProgressDrawable llena toda seekBar

done.setProgressDrawable(getResources().getDrawable(R.drawable.seekbar_progress)); 
    done.setThumb(getResources().getDrawable(R.drawable.seekbar_thumb)); 

seekbar_progress.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="line"> 
<stroke android:width="15dp" android:color="#52a8ec"/> 

seekbar_thumb.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="rectangle"> 
<gradient android:startColor="#ffffffff" android:endColor="#ff585858" android:angle="270"/> 
<size android:height="17dp" android:width="5dp"/> 
</shape> 

Alguna idea?

¡Gracias de antemano!

+0

puede agregar un código de cómo está tratando de hacer –

+0

@Agarwal Hecho! :) –

+0

@Agarwal alguna idea? –

Respuesta

1

Terminé en la misma situación que usted y logré resolver el problema implementando el progreso con el archivo XML de la lista de capas. Ver mi respuesta here.

+0

¡Lo intentaré! ¡Gracias! –

+0

He copiado y pegado todos los archivos xml y sigue rellenando toda la barra de búsqueda ... –

+0

Algunas personas sugieren que después de llamar al método setProgressDrawable(), SeekBar necesita volver a dibujarse. Intente configurar el relleno, incrementando el progreso, etc. Mi código después es: \t \t \t seekBar.setThumb (d); \t \t \t seekBar.incrementProgressBy (1); \t \t \t seekBar.setProgress (0); \t \t \t seekBar.setThumbOffset (-1); \t \t \t seekBar.setMax ((int) (max - min)); –

3

Me enfrenté al mismo problema y el siguiente código lo resolvió.

Dondequiera que esté utilizando el código para cambiar su dibujable simplemente hacer lo siguiente (donde 'p' es su barra de búsqueda):

int currentProgress = p.getProgress(); 
p.setProgress(0); 
Rect bounds = p.getProgressDrawable().getBounds(); 
p.setProgressDrawable(getResources().getDrawable(R.drawable.progress_drawable_orange)); 
p.getProgressDrawable().setBounds(bounds); 
p.setProgress(currentProgress); 

y no se olvide de añadir el siguiente cheque en su método onProgressChanged :

@Override 
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
    if(!fromUser) 
     return; 
    // ... THE REST OF YOUR CODE 
} 

example

+0

sigue llenando toda la barra de progreso para mí :( – cidermole

8

tratar de poner la forma de relleno dentro de una etiqueta de clip como tal

<clip> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
android:shape="line"> 
<stroke android:width="15dp" android:color="#52a8ec"/> 
</clip> 
+0

Esto me solucionó el problema, gracias, y creo que es una mejor respuesta ya que está todo dentro de la barra de progreso personalizada XML en lugar de agregar código. – Botman

+0

Esta solución funcionó para mí. No sé cómo funciona. Explique para que lo entienda mejor. –

0

Se pueden ajustar el campo progressTint en su diseño XML para cambiar el color progreso sin afectar a la totalidad del fondo SeekBar.

<SeekBar 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:progressTint="@color/seek_bar_progress"/> 

También hay thumbTint y progressBackgroundTint.