星级评分条(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颗星:
时间: 2024-10-12 04:31:14