星级评分条与拖动条有相同的父类:AbsSeekBar,所以它们十分类似。实际上星际评分条与拖动条的用法、功能都十分接近:它们都容许用户经过拖动来改变进度。RatingBar与SeekBar的最大区别在于:RatingBar经过星星来表示进度。android
RatingBar支持的经常使用XML属性ide
XML属性布局 |
说明spa |
android:isIndicatorcode |
设置该星级评分条是否容许用户改变(true为不容许修改)xml |
android:numStarsblog |
设置该星机评分条总共有多少个星级事件 |
android:rating图片 |
设置该星级评分条默认的星级utf-8 |
android:stepSize |
设置每次最少须要改变多少个星级 |
为了让程序能响应星级评分条评分的改变,能够考虑为它绑定一个OnRatingBarChangeListener监听器。
下面经过实例来示范RatingBar的功能与用法。
实例:经过星级改变图片的透明度
界面布局文件以下
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/image" android:layout_width="match_parent" android:layout_height="240dp" android:src="@drawable/lijiang"/> <!--定义一个拖动条,并改变它的滑块外观--> <RatingBar android:id="@+id/rating" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="5" android:max="255" android:progress="255" android:stepSize="0.5"/> </LinearLayout>
上面的布局文件中指定了该星际评分条的最大值为255,当前进度为255。其中两个属性都来自ProgressBar组件,这没有任何问题,由于RatingBar原本就是一个特殊的ProgressBar。
主程序只用为RatingBar绑定事件监听器,便可监听星级评分条的星级改变。主程序以下
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final ImageView image = findViewById(R.id.image); RatingBar ratingBar = findViewById(R.id.rating); ratingBar.setOnRatingBarChangeListener((bar, rating, fromUser)->{ //当星级评分条的评分发生改变时触发该方法 //动态改变图片的透明度,其中255是星级评分条的最大值 //5颗星星就表明最大值255 image.setImageAlpha((int)(rating * 255 / 5)); }); } }
上面定义了RatingBar时指定了android:stepSize="0.5",由此改星级评分条中星级的最小改变值为0.5,最少半个星级。
运行程序截图以下