【发布时间】:2013-02-08 06:22:10
【问题描述】:
我有一个表单,它是根据从 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>
其中custom_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。没有它,它不是很有用。
【问题讨论】:
标签: android android-layout ratingbar