在RatingBar上调用getProgressDrawable()只显示一颗星

时间:2011-09-26 22:04:25

标签: android

我的应用中有自定义RatingBar,如果用户对其进行评分,则应显示网站平均评分或电影的用户评分。颜色应根据显示的评级是网站平均值还是用户评级而改变。

这是一个过程: 用户观看电影。显示电影的网站平均评分。

RatingBar的布局代码:

<RatingBar android:id="@+id/ratingBar" android:isIndicator="true" 
    android:layout_margin="10dip" style="@style/RatingBar"
    android:progressDrawable="@drawable/site_rating_bar" android:stepSize="0.1" />

RatingBar风格:

<style name="RatingBar" parent="@android:style/Widget.RatingBar">
    <item name="android:numStars">10</item>
    <item name="android:layout_width">wrap_content</item>
    <item name="android:layout_height">wrap_content</item>
    <item name="android:minHeight">30dip</item>
    <item name="android:maxHeight">30dip</item>
</style>

site_rating_bar.xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
   <item android:id="@+android:id/background"
      android:drawable="@drawable/btn_rating_star_off" />
   <item android:id="@+android:id/secondaryProgress"
      android:drawable="@drawable/btn_rating_star_off" />
   <item android:id="@+android:id/progress"
      android:drawable="@drawable/btn_site_rating_star_on" />
</layer-list>

用户可以点击RatingBar并弹出一个对话框,他们可以在其中添加自己的电影自定义评级。关闭对话框后,代码将更新上面RatingBar中显示的评级。我还想更改ProgressDrawable,以便星星的颜色发生变化,表明用户已添加了自定义评级。

但是当我尝试以编程方式设置ProgressDrawable时,它会更新它以便显示正确的颜色,但它只会在屏幕上显示一个星形。

ratingBar.setProgressDrawable(thisActivity.getResources().getDrawable(R.drawable.user_rating_bar));

user_rating_bar.xml:

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+android:id/background"
      android:drawable="@drawable/btn_rating_star_off" />
    <item android:id="@+android:id/secondaryProgress"
      android:drawable="@drawable/btn_rating_star_off" />
    <item android:id="@+android:id/progress"
      android:drawable="@drawable/btn_user_rating_star_on" />
</layer-list>

我已经尝试保存原始边界并重置它们,但它没有帮助:

Rect bounds = ratingBar.getProgressDrawable().getBounds();  
ratingBar.setProgressDrawable(thisActivity.getResources().getDrawable(R.drawable.user_rating_bar));
ratingBar.getProgressDrawable().setBounds(bounds);

还尝试重置numStars以防它丢失。

任何想法都非常感激。 TIA。 :)

2 个答案:

答案 0 :(得分:1)

我现在正在经历同样的事情......我不能为我的生活让它按照预期通过代码工作,所以我要去janky-layout路线。 :(

<RatingBar
  android:id="@+id/beer_rating"
  android:numStars="5"
  android:progressDrawable="@drawable/rating_bar"
  android:indeterminateDrawable="@drawable/rating_bar"
  android:stepSize="0.5"
  android:isIndicator="true"
  android:layout_gravity="center"
  style="?android:attr/ratingBarStyleSmall" />
<RatingBar
  android:id="@+id/beer_rating_average"
  android:indeterminateDrawable="@drawable/rating_bar_average"
  android:isIndicator="true"
  android:layout_gravity="center"
  android:numStars="5"
  android:progressDrawable="@drawable/rating_bar_average"
  android:stepSize="0.5"
  android:visibility="gone"
  style="?android:attr/ratingBarStyleSmall"/>

然后只需在需要时翻转它们的可见性:

findViewById(R.id.beer_rating).setVisibility(View.GONE);
findViewById(R.di.beer_rating_average).setVisibility(View.VISIBLE);

很糟糕,但它确实有效。如果你想出任何其他解决办法,请告诉我。

答案 1 :(得分:0)

尝试使用: 使用ProgressBar.setProgressDrawableTiled(Drawable)

并将minSDK设置为21