我有一个表单,它是根据从 Web 服务接收到的数据动态生成的。此 Web 服务提供创建输入元素时需要使用的图像。我很难设置progressDrawable
. RatingBar
虽然 XML 我可以使用以下内容应用自定义图像progressDrawable
:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+android:id/background" android:drawable="@drawable/custom_star" />
<item android:id="@+android:id/secondaryProgress" android:drawable="@drawable/custom_star" />
<item android:id="@+android:id/progress" android:drawable="@drawable/custom_star" />
</layer-list>
wherecustom_star
是一个简单的 .png 图像,并带有@android:style/Widget.RatingBar
RatingBar 样式。这工作正常:
但我想custom_star
动态改变。
在代码中,我尝试直接使用位图设置进度可绘制:
Drawable d = new BitmapDrawable(getResources(), downloadedImage);
ratingBar.setProgressDrawable(d);
并且还通过构造一个layer-list
:
LayerDrawable layerDrawable = new LayerDrawable(new Drawable[] {
getResources().getDrawable(R.drawable.custom_star),
getResources().getDrawable(R.drawable.custom_star),
getResources().getDrawable(R.drawable.custom_star)
});
layerDrawable.setId(0, android.R.id.background);
layerDrawable.setId(1, android.R.id.secondaryProgress);
layerDrawable.setId(2, android.R.id.progress);
ratingBar.setProgressDrawable(layerDrawable);
都不适合我;两者都导致custom_star
drawable出现一次,被以下尺寸拉伸RatingBar
:
有任何想法吗?
更新:
Luksprog 在下面的回答有所改进,但我仍然遇到一些问题。现在,星形可绘制对象没有被拉伸,并且可以通过触摸设置值,但在选择 3/5 时显示如下:
并选择了 5/5:
我相信图像的缩放可以通过一些调整来修复,但令人讨厌的是,secondaryProgress
drawable 似乎没有设置 - 用于灰色未选择星星的 drawable。没有它,它不是很有用。