setProgressDrawable заполняет весь seekBar

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

   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>

Есть идеи?

Заранее спасибо!


person anonymous    schedule 15.04.2012    source источник
comment
вы можете добавить код, как вы пытаетесь сделать   -  person Shankar Agarwal    schedule 15.04.2012


Ответы (4)


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

<clip>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line">
<stroke android:width="15dp"    android:color="#52a8ec"/>
</clip>
person Dan Levin    schedule 16.06.2013
comment
Это устранило проблему для меня, спасибо, и я думаю, что это лучший ответ, поскольку все это находится в пользовательском индикаторе выполнения XML, а не в добавлении кода. - person Botman; 23.10.2014
comment
Это решение сработало для меня. Но я не знаю, как это работает. Пожалуйста, объясните, чтобы понять лучше. - person Oğuzhan Koşar; 14.02.2018

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

Везде, где вы используете код для изменения своего рисунка, просто сделайте следующее (где «p» — ваша панель поиска):

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
}

пример

person alchemist    schedule 30.08.2012
comment
все еще заполняет весь индикатор выполнения для меня :( - person cidermole; 05.07.2017

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

person Milos Pesic    schedule 16.05.2012
comment
Я скопировал и вставил все ваши xml-файлы, и они по-прежнему заполняют всю панель поиска... - person anonymous; 16.05.2012
comment
Некоторые люди предполагают, что после вызова метода setProgressDrawable() SeekBar необходимо перерисовать. Попробуйте установить отступы, увеличить прогресс и т. д. После этого мой код: seekBar.setThumb(d); seekBar.incrementProgressBy(1); seekBar.setProgress (0); seekBar.setThumbOffset (-1); seekBar.setMax((int) (max - min)); - person Milos Pesic; 24.05.2012

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

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

Есть также thumbTint и progressBackgroundTint.

person theshadowchild    schedule 27.01.2017