我有一个表单,可以从Web服务接收的数据动态生成。该Web服务提供了需要用于创建输入元素的图像。我很难在设置RatingBar
的progressDrawable
。虽然XML我可以在使用应用自定义图像以下为progressDrawable
:使用从网络加载的图像构建RatingBar
<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
绘制出现一次,由RatingBar
的尺寸拉伸:
任何想法?
更新:下面
Luksprog的回答做出了改进,但我仍然有几个问题。现在,明星绘制没有被拉伸和值可通过触摸来设定,但它似乎是这样用3/5选择:
和5/5选择:
我相信图像的缩放可以通过一些调整来修复,但令人讨厌的是secondaryProgress
drawable似乎没有设置 - 用于灰色未选定星星的drawable。没有这个,它不是很实用。
好东西。这绝对是为我工作,虽然我似乎无法让它设置secondaryProgress。点击时出现星星,但未出现灰色的未选中背景(我正在使用不同的drawable,R.drawable.star_off)。 – blork 2013-02-26 16:24:07
尽管您的确切解决方案对我无效,但我查看了[ProgressBar的Android源代码](http://grepcode.com/file_/repository.grepcode.com/java/ext/com.google.android/ android/2.3.3_r1/android/widget/ProgressBar.java /),并且翻出tileify()方法对我很好。谢谢! – blork 2013-02-28 10:09:12
@blork对不起,我发布的代码(没有太多时间),它没有完全复制该方法(我不知何故丢失了'clip'标志)。我相信你也能够让星星拥有正确的尺寸。 'RatingBar'通过将其中一个位图的宽度乘以恒星数量来设置它的宽度(通过自定义的'RatingBar'的'onMeasure'方法计算该值应该显示合适的恒星数量)。 – Luksprog 2013-02-28 10:39:35