自定义RatingBar

时间:2016-06-17 10:32:31

标签: android ratingbar

我堆叠了非常烦人的问题,我想在我的RatingBar小部件中添加自定义drawable,我跟着some examples如何操作:

1)我创建了自己的风格,设置minHeight=16dipmaxHeight=16dip

2)增加了16px * 16px的星形抽屉。

它改变了图标,但问题是我的星星看起来很模糊,即低分辨率。我知道为什么,bcs drawables是16 * 16px,但我不能让他们的质量更好(例如76px * 76px),bcs Android不会扩展评级栏图标。当你减少minHeight和maxHeight时,android将始终裁剪图标。即使我不使用min和max heght结果是相同的 - 我的大抽奖(我试图在hdpi,xhdpi文件夹中添加drawable)只是裁剪。

有没有办法在自定义RatingBar中提高drawable的分辨率? THX。

P.S。这是我的代码以防万一:

风格:

<style name="CustomRatingBar" parent="@android:style/Widget.RatingBar">
    <item name="android:progressDrawable">@drawable/rating_bar_drawable</item>
    <item name="android:minHeight">16dip</item>
    <item name="android:maxHeight">16dip</item>
</style>

rating_bar_drawable.xml:

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

main.xml中:

 <RatingBar
            android:id="@+id/car_washes_list_item_rating_bar"
            style="@style/CustomRatingBar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="@dimen/car_washes_item_rating_bar_margin_right"
            android:layout_marginRight="@dimen/car_washes_item_rating_bar_margin_right"
            android:numStars="5"/>

2 个答案:

答案 0 :(得分:3)

试试这个例子

  1. 在drawable中创建custom_ratingbar_selector.xml并粘贴此代码

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@android:id/background"
    android:drawable="@drawable/unslected_star_icon" />
    
    <item android:id="@android:id/secondaryProgress"
    android:drawable="@drawable/unslected_star_icon" />
    
    <item android:id="@android:id/progress"
    android:drawable="@drawable/slected_star_icon" />
    
    </layer-list>
    
  2. 在布局活动中使用它

    <RatingBar
     android:id="@+id/ratingBar2"
     android:layout_width="wrap_content"
     android:layout_height="21dp"
     android:progressDrawable="@drawable/custom_ratingbar_selector"
     android:numStars="5"
     android:stepSize="1"
     android:rating="3.0" />
    

    注意:

    我的照片尺寸是22 * 21所以我的评级栏的高度是21dp ....检查你的照片尺寸并设置为高度,如果你不想显示不准确

答案 1 :(得分:2)

我也尝试在android中使用自定义评级样式,我的经验很糟糕,所以我了解到最好使用本地sytles,然后将类文件中的颜色切割为如下所示

 <RatingBar
    android:id="@+id/ratingBar"
    android:isIndicator="false"
    android:numStars="5"
    android:stepSize="1.0"
    style="?android:attr/ratingBarStyle"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="45dp"
    android:layout_centerHorizontal="true"
    android:layout_below="@+id/linearLayoutLoginFailed"
    android:progressTint="@android:color/white"
   />

并且在您的课程中,如果您想更改yoru评级星标的颜色,请添加此代码

LayerDrawable layerDrawable =(LayerDrawable)ratingBar.getProgressDrawable();

    // Unfilled star color
   DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(2)),
            Color.WHITE);