2012-04-15 4 views
6

Как я уже говорил в названии, когда я использую setProgressDrawable, он заполняет весь SeekBar: если прогресс составляет 34%, прогресс показывает 100%, но большой палец показывает правильный процентный показатель 34%. Я не выяснить, что может быть проблема ...setProgressDrawable заполняет весь 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> 

Любая идея?

Спасибо заранее!

+0

можете ли вы добавить код, как вы пытаетесь сделать –

+0

@Agarwal Done! :) –

+0

@Agarwal любая идея? –

ответ

1

Я закончил в той же ситуации, что и вы, и смог решить проблему, выполнив прогресс с XML-файлом на уровне слоев. См. Мой ответ here.

+0

Я попробую! Спасибо! –

+0

Я скопировал и вставил все ваши xml-файлы, и он все еще заполняет весь поиск ... –

+0

Некоторые люди предполагают, что после вызова метода setProgressDrawable() SeekBar необходимо перерисовать. Попробуйте установить заполнение, увеличивая прогресс и т. Д. Мой код: \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

Я столкнулся с той же проблемой, и следующий код разрешил ее.

Везде, где вы используете код, чтобы изменить Drawable просто сделать следующее (где «р» Ваш SeekBar):

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); 

и не забудьте добавить следующую проверку в вашем onProgressChanged метод:

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

example

+0

все еще заполняет весь индикатор выполнения для меня :( – cidermole

8

попытка поставить форму заливки внутри клипа тега, как так

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

Это исправляло проблему для меня, спасибо, и я думаю, что это лучший ответ, поскольку все это в пользовательском шаге прогресса, а не в добавлении кода. – Botman

+0

Это решение сработало для меня. Я не знаю, как это работает. Пожалуйста, объясните, чтобы понять лучше. –

0

Вы можете настроить progressTint поля в макете XML, чтобы изменить цвет прогресса, не затрагивая весь фон на SeekBar в.

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

Там также thumbTint и progressBackgroundTint.

Смежные вопросы