【问题标题】:Custom RatingBar自定义评分栏
【发布时间】:2016-06-17 10:32:31
【问题描述】:

我遇到了非常烦人的问题,我想在我的 RatingBar 小部件中添加自定义可绘制对象,我按照 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 文件夹中添加可绘制对象)只是裁剪。

有没有办法在自定义 RatingBar 中提高可绘制对象的分辨率?谢谢。

附:这是我的代码以防万一:

风格:

<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"/>

【问题讨论】:

标签: android ratingbar


【解决方案1】:

我也曾尝试在 android 中使用自定义评分样式,但我的经验很糟糕,所以我了解到最好使用本机样式,然后在你的类文件中自定义颜色,如下所示

 <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);

【讨论】:

    【解决方案2】:

    试试这个例子

    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....如果您不想显示不准确,请检查您的图片尺寸并设置为高度

    【讨论】:

    • 只显示单星
    猜你喜欢
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 2011-11-28
    • 1970-01-01
    • 1970-01-01
    • 2018-05-18
    • 1970-01-01
    相关资源
    最近更新 更多