Android 自定义ProgressBar以编程方式更改位图

Android 自定义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

我花了很多时间研究,但毫无希望。我想做的是以编程方式更改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 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);

}