我是一名Android初学者,我想制作自定义评级栏。
免责声明:它不是重复的。因为我读过的所有帖子都询问如何更改星星的颜色以及如何删除笔画。那不是我想要的。我想要中风,并能够改变边框的颜色。
透明且黄色的笔划为空,黄色背景和笔划为一半并填充。
我不想使用png。我已经拥有自己的但是它们太小了。如果我只使用XML属性和drawables制作星星,我只是不想让设计师制作新的。
<RatingBar
android:id="@+id/thread_rating"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:isIndicator="true"
android:numStars="5"
android:progressBackgroundTint="@color/gray"
android:progressTint="@color/gold"
android:rating="2.5"
android:secondaryProgressTint="@color/gray"
android:stepSize="0.5"
style="?android:attr/ratingBarStyleSmall"
/>
我和另一位工程师一起工作。他还在java文件中编写代码
private void setRatingBarStart(RatingBar rating_bar) {
LayerDrawable stars = (LayerDrawable) rating_bar.getProgressDrawable();
stars.getDrawable(2)
.setColorFilter(getResources().getColor(R.color.gold),
PorterDuff.Mode.SRC_ATOP); // for filled stars
stars.getDrawable(1)
.setColorFilter(getResources().getColor(R.color.light_gray),
PorterDuff.Mode.SRC_ATOP); // for half filled stars
stars.getDrawable(0)
.setColorFilter(getResources().getColor(R.color.light_gray),
PorterDuff.Mode.SRC_ATOP); // for empty stars
[所以现在它有一个灰色背景,黄色表示填充,现在没有中风。
我已经知道如何将背景设置为透明并使其变黄。我只是不知道如何设置笔触颜色。非常感谢!!!!
答案 0 :(得分:18)
将所有可绘制颜色设置为黄色(对于所有,在所有中为),以设置笔划和背景。 (用于后台,次要进度和进度)
getResources().getColor(R.color.gold)
从RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingBar);
LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable();
stars.getDrawable(2).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP);
stars.getDrawable(0).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP);
stars.getDrawable(1).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP);
删除progressBackgroundTint
,progressTint
,secondaryProgressTint
属性,无需删除。
RatingBar
,结果是::
希望这会有助于(粉红色只是背景色)
将drawable 1和0设置为红色后:
<RatingBar
android:id="@+id/ratingBar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5"
android:rating="2.5"/>
答案 1 :(得分:7)
不要使用任何库或风格。使用下面的步骤即可得到结果。
在drawable文件夹中创建一个文件custom_ratingbar.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_full" />
</layer-list>
然后在RatingBar中使用以下内容:
<RatingBar
android:id="@+id/ratingBarChef"
style="?android:attr/ratingBarStyleSmall"
android:numStars="5"
android:stepSize="0.2"
android:rating="3.0"
android:progressDrawable="@drawable/custom_ratingbar"
android:isIndicator="false"
/>
答案 2 :(得分:3)
我想我确实找到了你需要的东西。您必须按照此answer中的说明创建自定义RatingBar
,但您必须使用矢量绘图而非标准绘图。
您可以在本网站下载3个drawables(full,half和empty):
https://materialdesignicons.com/
或者右键点击res
文件夹: - &gt;新 - &gt; Android Studio上的矢量资产。
以下是3个drawables XML,以防你找不到它们:
全明星:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#000" android:pathData="M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z" />
半星:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#000" android:pathData="M12,15.89V6.59L13.71,10.63L18.09,11L14.77,13.88L15.76,18.16M22,9.74L14.81,9.13L12,2.5L9.19,9.13L2,9.74L7.45,14.47L5.82,21.5L12,17.77L18.18,21.5L16.54,14.47L22,9.74Z" />
空星:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#000" android:pathData="M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z" />
要更改其尺寸,只需更新属性height
和width
。
要更改颜色,只需更新属性fillColor
并设置黄色。
答案 3 :(得分:3)
另一种方法是创建自定义评级栏,如果您没有任何图像,请按照以下步骤操作。这个所有文件都在drawable文件夹中创建。
<强> emptystar.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#F1C332" android:pathData="M12,15.39L8.24,17.66L9.23,13.38L5.91,10.5L10.29,10.13L12,6.09L13.71,10.13L18.09,10.5L14.77,13.38L15.76,17.66M22,9.24L14.81,8.63L12,2L9.19,8.63L2,9.24L7.45,13.97L5.82,21L12,17.27L18.18,21L16.54,13.97L22,9.24Z" />
</vector>
<强> full_star.xml 强>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#F1C332" android:pathData="M12,17.27L18.18,21L16.54,13.97L22,9.24L14.81,8.62L12,2L9.19,8.62L2,9.24L7.45,13.97L5.82,21L12,17.27Z" />
</vector>
<强> half_star.xml 强>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:height="24dp"
android:width="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path android:fillColor="#000" android:pathData="M12,15.89V6.59L13.71,10.63L18.09,11L14.77,13.88L15.76,18.16M22,9.74L14.81,9.13L12,2.5L9.19,9.13L2,9.74L7.45,14.47L5.82,21.5L12,17.77L18.18,21.5L16.54,14.47L22,9.74Z" >
</path>
</vector>
<强> food_ratingbar_full_empty.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<item android:state_pressed="true"
android:state_window_focused="true"
android:drawable="@drawable/empty_star" />
<item android:state_focused="true"
android:state_window_focused="true"
android:drawable="@drawable/empty_star" />
<item android:state_selected="true"
android:state_window_focused="true"
android:drawable="@drawable/empty_star" />
<item android:drawable="@drawable/empty_star" />
<强> food_ratingbar_full_filled.xml 强>
<?xml version="1.0" encoding="utf-8"?>
<item android:state_pressed="true"
android:state_window_focused="true"
android:drawable="@drawable/full_star" />
<item android:state_focused="true"
android:state_window_focused="true"
android:drawable="@drawable/full_star" />
<item android:state_selected="true"
android:state_window_focused="true"
android:drawable="@drawable/full_star" />
<item android:drawable="@drawable/full_star" />
<强> food_rating_bar.xml 强>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@android:id/background"
android:drawable="@drawable/food_ratingbar_full_empty" />
<item android:id="@android:id/secondaryProgress"
android:drawable="@drawable/food_ratingbar_full_empty" />
<item android:id="@android:id/progress"
android:drawable="@drawable/food_ratingbar_full_filled" />
<强> style.xml 强>
<style name="foodRatingBar" parent="@android:style/Widget.RatingBar">
<item name="android:progressDrawable">@drawable/food_rating_bar_full</item>
<item name="android:minHeight">23dip</item>
<item name="android:maxHeight">25dip</item>
</style>
在您的布局中
<RatingBar
android:id="@+id/ratingBarDish"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/dp10"
android:layout_marginStart="@dimen/dp10"
style="@style/foodRatingBar"
android:isIndicator="true" />
答案 4 :(得分:0)
您可以尝试使用此图像并将边框图像用作星星https://github.com/ome450901/SimpleRatingBar,因为icon_starempty和icon_starfilled是您各自的图像
<com.willy.ratingbar.ScaleRatingBar xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/deals_ratingbar"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginLeft="@dimen/_10dp"
android:layout_toRightOf="@+id/txt_newprice"
android:layout_weight=".4"
android:gravity="center|right"
android:outlineProvider="none"
app:srb_drawableEmpty="@drawable/icon_starempty"
app:srb_drawableFilled="@drawable/icon_starfilled"
app:srb_isIndicator="true"
app:srb_numStars="5"
app:srb_starHeight="@dimen/_10dp"
app:srb_starPadding="@dimen/_3dp"
app:srb_starWidth="@dimen/_10dp" />