setProgressDrawable填充整个seekBar

时间:2012-04-15 12:23:35

标签: android progress-bar progress seekbar fill

正如我在标题中所说,当我使用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>

有什么想法吗?

提前谢谢!

4 个答案:

答案 0 :(得分:8)

尝试将填充形状放在剪辑标记中,如此

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

答案 1 :(得分:3)

我遇到了同样的问题,以下代码解决了这个问题。

无论您使用代码更改drawable,只需执行以下操作(其中'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
}

example

答案 2 :(得分:1)

我以与您相同的情况结束,并设法通过实施图层列表XML文件的进度来解决问题。 请参阅我的回答here

答案 3 :(得分:0)

您可以调整布局xml中的find字段以更改进度颜色,而不会影响SeekBar的整个背景。

progressTint

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