Android 自定义ProgressBar以编程方式更改位图
我花了很多时间研究,但毫无希望。我想做的是以编程方式更改progress\u bar\u clip.xml的位图drawable(android:id=“progress”) progress\u bar\u clip.xmlAndroid 自定义ProgressBar以编程方式更改位图,android,bitmap,drawable,Android,Bitmap,Drawable,我花了很多时间研究,但毫无希望。我想做的是以编程方式更改progress\u bar\u clip.xml的位图drawable(android:id=“progress”) progress\u bar\u clip.xml <?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android" > <item a
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@android:id/background">
<clip
android:clipOrientation="vertical"
android:drawable="@drawable/body_empty"
android:gravity="bottom" />
</item>
<item android:id="@android:id/progress">
<clip
android:clipOrientation="vertical"
android:gravity="bottom" >
<bitmap android:src="@drawable/body_empty"
android:id="@+id/to_be_changed" >
</bitmap>
</clip>
</item>
</layer-list>
<ProgressBar
android:id="@+id/progressbar"
style="?android:attr/progressBarStyleHorizontal"
android:layout_width="180dp"
android:layout_height="240dp"
android:layout_marginTop="80dp"
android:indeterminateOnly="false"
android:max="100"
android:progress="-500"
android:progressDrawable="@drawable/progress_bar_clip"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
>
</ProgressBar>
动画
私有void wiresultanimation(视图){
动画效果很好,但可绘制的内容没有改变。我找不到有帮助的内容,你能给我一些简单的指导吗?@Corsair992如果你有一组用于不同进度级别的静态可绘制内容,并希望它们根据当前进度动态设置为可绘制进度t progress,那么我对这个问题的回答描述了如何实现它。我明白了,谢谢!但是我想做的是根据是否满足条件在id=progress项中描述一个不同的可绘制项。这些条件发生变化的场景是什么?它们是什么类型的条件?而且,代码中似乎没有任何地方是这样的调用
setProgressDrawable()
或通过调用getProgressDrawable()
获取当前可绘制的进度-在不调用任何方法的情况下,如何影响ProgressBar
?
Resources res = getResources();
LayerDrawable layerDrawable = (LayerDrawable)res.getDrawable(R.drawable.progress_bar_clip);
Drawable newDrawable = res.getDrawable(R.drawable.i_want_to_set_this);
layerDrawable.setDrawableByLayerId(R.id.to_be_changed, newDrawable);
final ProgressBar bar = (ProgressBar) view.findViewById(R.id.progressbar);
final Handler handler = new Handler();
runnable = new Runnable() {
@Override
public void run() {
if (bar.getProgress() != 100) {
bar.incrementProgressBy(1);
handler.postDelayed(runnable, 20);
}
}
};
handler.post(runnable);
}