小编ink*_*nky的帖子

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

我的应用程序中有一个自定义评级栏,它应该显示网站平均评级或电影的用户评级(如果用户已评级)。颜色应根据显示的评级是站点平均值还是用户评级而变化。

流程如下: 用户观看电影。显示电影的站点平均评级。

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" />
Run Code Online (Sandbox Code Playgroud)

评级栏样式:

<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>
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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

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

ratingBar.setProgressDrawable(thisActivity.getResources().getDrawable(R.drawable.user_rating_bar));
Run Code Online (Sandbox Code Playgroud)

用户评级栏.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>
Run Code Online (Sandbox Code Playgroud)

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

Rect bounds = ratingBar.getProgressDrawable().getBounds();  
ratingBar.setProgressDrawable(thisActivity.getResources().getDrawable(R.drawable.user_rating_bar));
ratingBar.getProgressDrawable().setBounds(bounds);
Run Code Online (Sandbox Code Playgroud)

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

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

android

5
推荐指数
1
解决办法
2120
查看次数

标签 统计

android ×1