我的应用程序中有一个自定义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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。