星级评分条(RatingBar)与拖动条十分相似,他们还有共同的父类AbsSeekBar。实际上星级评分条和拖动条的用法和功能都十分的接近:他们都允许用户通过拖动来改变进度。RatingBar与SeekBar的最大区别在于:RatingBar是通过星星来表示进度。
为了让程序能响应星级评分条评分的改变,程序可以考虑为它绑定一个OnRatingBarChangeListener监听器。
星级评分条支持的常见的XML属性。
XMl属性 | 说明 |
android:isIndicator | 设置该星级评分条是否允许用户改变(true为不允许改变) |
android:numstars | 设置该星级评分条总共有多少个星级 |
android:rating | 设置该星级评分条默认的星级 |
android:stepSize | 设置每次最少需要改变多少个星级 |
实例:通过星级改变图片的透明度
layout/main.xml
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:orientation="vertical" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent"> 6 7 <ImageView 8 android:id="@+id/image" 9 android:layout_width="fill_parent" 10 android:layout_height="240px" 11 android:src="@drawable/lijiang" 12 /> 13 14 <!-- 定义一个星级评分条 --> 15 <RatingBar 16 android:id="@+id/rating" 17 android:layout_width="wrap_content" 18 android:layout_height="wrap_content" 19 android:numStars="5" 20 android:max="255" 21 android:progress="255" 22 android:stepSize="0.5" 23 /> 24 25 26 </LinearLayout>
主程序:com.example.ratingbar.RatingBarTest.xml
1 package com.example.ratingbar; 2 3 import android.support.v7.app.ActionBarActivity; 4 import android.support.v7.app.ActionBar; 5 import android.support.v4.app.Fragment; 6 import android.os.Bundle; 7 import android.view.LayoutInflater; 8 import android.view.Menu; 9 import android.view.MenuItem; 10 import android.view.View; 11 import android.view.ViewGroup; 12 import android.widget.ImageView; 13 import android.widget.RatingBar; 14 import android.widget.RatingBar.OnRatingBarChangeListener; 15 import android.os.Build; 16 17 public class RatingBarTest extends ActionBarActivity { 18 19 @Override 20 protected void onCreate(Bundle savedInstanceState) { 21 super.onCreate(savedInstanceState); 22 setContentView(R.layout.main); 23 24 final ImageView image = (ImageView) findViewById(R.id.image); 25 RatingBar ratingBar = (RatingBar) findViewById(R.id.rating); 26 27 ratingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() { 28 29 @Override 30 public void onRatingChanged(RatingBar ratingBar, float rating, 31 boolean fromUser) { 32 //动态改变图片的透明度,其中255是星级评分条的最大值 33 //5个星星就代表最大值255 34 image.setAlpha((int)(rating * 255 / 5)); 35 } 36 }); 37 } 38 39 }
运行效果5颗星:
运行效果3颗星: