Android:自定义 RatingBar - 图片不适合

Posted

技术标签:

【中文标题】Android:自定义 RatingBar - 图片不适合【英文标题】:Android: Custom RatingBar - Images do not fit 【发布时间】:2015-09-24 14:45:58 【问题描述】:

android 中设置自定义评分栏时我遇到了一些问题。我已按照本教程进行操作:

How to create Custom Ratings bar in Android

但是,我在更改/选择超过 4 颗星时遇到了问题。选择的星图有点错位。这是一张图片,向您展示它的外观。

这是我用于创建自定义评分栏的 XML。

定义评分栏视图的主xml:

 <LinearLayout
        android:layout_
        android:layout_
        android:orientation="horizontal"
        android:padding="10dp"
        android:gravity="center" >

        <RatingBar
            android:id="@+id/ratingBar"
            android:layout_
            android:layout_
            android:numStars="50"
            android:stepSize="1.0"
            style="@style/AppCustomRatingBar"/>

RatingBar 的自定义样式

<style name="AppCustomRatingBar"
    parent="@android:style/Widget.RatingBar">
    <item name="android:progressDrawable">@drawable/rating_stars_custom</item>
    <item name="android:minHeight">19dp</item>
    <item name="android:maxHeight">19dp</item>
</style>

rating_stars_custom.xml

<item
    android:id="@android:id/background"
    android:drawable="@drawable/rating_stars_yellow_empty" />

<item android:id="@android:id/secondaryProgress"
    android:drawable="@drawable/rating_stars_yellow_empty" />

<item
    android:id="@android:id/progress"
    android:drawable="@drawable/rating_stars_yellow_full" />

rating_stars_yellow_empty.xml

<?xml version="1.0" encoding="utf-8"?>

<item
    android:id="@android:id/background"
    android:drawable="@drawable/rating_stars_yellow_empty" />

<item android:id="@android:id/secondaryProgress"
    android:drawable="@drawable/rating_stars_yellow_empty" />

<item
    android:id="@android:id/progress"
    android:drawable="@drawable/rating_stars_yellow_full" />

rating_stars_yellow_full.xml

<item android:state_pressed="true"
    android:state_window_focused="true"
    android:drawable="@drawable/home_icon_star_fill_selected" />

<item android:state_focused="true"
    android:state_window_focused="true"
    android:drawable="@drawable/home_icon_star_fill_selected" />

<item android:state_selected="true"
    android:state_window_focused="true"
    android:drawable="@drawable/home_icon_star_fill_selected" />

<item android:drawable="@drawable/home_icon_star_fill_selected" />

我做错了什么,放错了星星?星星(黄色和白色)的图像尺寸相同。

【问题讨论】:

【参考方案1】:

我设法修复它。如果您查看我在帖子中提供的图片,上面的黄色星星与 1pix 相比,与空星星相比就像关闭了。所以我看了看我使用的照片和它们的尺寸。之后,与空星的图像相比,黄色星似乎短了 1 像素(宽度)。所以这是我的问题,我得到了新的星星照片,并确保它们的大小相同。现在我有 2 张 30x30 的图片,一切正常!这解决了我的问题!因此,对于面临相同问题的人,我的建议是仔细查看他们正在使用的图片的大小(空/满),并确保它们的大小相同。这样可以节省时间和不必要的编码。 GL&HF :)

【讨论】:

【参考方案2】:

好吧,我在评分栏上遇到了同样的问题。在做了一些研究之后,我找到了解决上述问题的方法。

首先,您需要 2 颗星,一颗空星和一颗彩色星。和大小应该是一样的。 (就我而言,两者都是 25x25)

然后将此代码放入样式 xml 中

 <style name="redbar" parent="@android:style/Widget.RatingBar">
    <item name="android:progressDrawable">@drawable/ratingbar_red</item>
    <item name="android:minHeight">25dip</item>
    <item name="android:maxHeight">25dip</item>
</style>

在可绘制文件夹中创建另一个名为 ratingbar_red.xml 的 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/star_empty" />
    <item android:id="@+android:id/secondaryProgress"
          android:drawable="@drawable/star_empty" />
    <item android:id="@+android:id/progress"
          android:drawable="@drawable/star" />    
</layer-list>

最后像这样创建你的 RatingBar。

 <RatingBar
                                android:id="@+id/RatingBar05"
                                style="@style/redbar"
                                android:layout_
                                android:layout_
                                android:isIndicator="false"
                                android:numStars="5"/>

【讨论】:

【参考方案3】:

这个错误 ||问题实际上与图像的大小有关,两者必须具有相同的大小,我修复此错误的方法是我没有删除填充图像的描边或边框,两个图像必须具有相同的宽度和身高

【讨论】:

以上是关于Android:自定义 RatingBar - 图片不适合的主要内容,如果未能解决你的问题,请参考以下文章

Android RatingBar 自定义样式

Android:自定义 RatingBar - 图片不适合

Android自定义View实战之自定义评价打分控件RatingBar,可以自定义星星大小和间距

自定义RatingBar

如何在 RatingBar 中设置星星的自定义大小

自定义 RatingBar 始终显示五颗星