正如我在标题中所说,当我使用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>
有什么想法吗?
提前谢谢!
答案 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
}
答案 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
。