项目需要用到评分,系统给的RaatingBar功能严重不足,网上搜索的好像页有问题,自己简单实现一下。话不多说,直接上代码。
1.首先布局文件写一个LinearLayout
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <ImageView android:id="@+id/iv_star1" style="@style/MyRatingStyle" android:src="@drawable/star_empty" /> <ImageView android:id="@+id/iv_star2" style="@style/MyRatingStyle" android:src="@drawable/star_empty" /> <ImageView android:id="@+id/iv_star3" style="@style/MyRatingStyle" android:src="@drawable/star_empty" /> <ImageView android:id="@+id/iv_star4" style="@style/MyRatingStyle" android:src="@drawable/star_empty" /> <ImageView android:id="@+id/iv_star5" style="@style/MyRatingStyle" android:src="@drawable/star_empty" /> </LinearLayout> </LinearLayout> style设置星星大小,间距等属性<!--设置星星的大小 可以添加其他属性 --> <style name="MyRatingStyle" parent="@android:style/Widget.RatingBar"> <item name="android:layout_width">50dp</item> <item name="android:layout_height">50dp</item> </style>
代码实现,很简单 public class MainActivity extends AppCompatActivity { ArrayList<ImageView> stars = new ArrayList<>(); private ImageView ivStar1; private ImageView ivStar2; private ImageView ivStar3; private ImageView ivStar4; private ImageView ivStar5; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ivStar1 = (ImageView) findViewById(R.id.iv_star1); ivStar2 = (ImageView) findViewById(R.id.iv_star2); ivStar3 = (ImageView) findViewById(R.id.iv_star3); ivStar4 = (ImageView) findViewById(R.id.iv_star4); ivStar5 = (ImageView) findViewById(R.id.iv_star5); setStars();//设置评分星星的数量 } //自定义RattingBar(根据服务器数据设置评分星星的数量) private void setStars() { stars.add(ivStar1); stars.add(ivStar2); stars.add(ivStar3); stars.add(ivStar4); stars.add(ivStar5); int score = 80;//评分(应该服务器获取,在此写死) for (int i = 0; i < score / 20; i++) { stars.get(i).setImageResource(R.drawable.star); } //设置半个星星 if (score % 20 > 10) { stars.get(score / 20).setImageBitmap(R.drawable.star_half); } } }
引用style