星級評分條(RatingBar)的功能與用法
- 2019 年 11 月 8 日
- 筆記
星級評分條與拖動條有相同的父類:AbsSeekBar,因此它們十分相似。實際上星際評分條與拖動條的用法、功能都十分接近:它們都允許用戶通過拖動來改變進度。RatingBar與SeekBar的最大區別在於:RatingBar通過星星來表示進度。
RatingBar支援的常用XML屬性
XML屬性 |
說明 |
android:isIndicator |
設置該星級評分條是否允許用戶改變(true為不允許修改) |
android:numStars |
設置該星機評分條總共有多少個星級 |
android:rating |
設置該星級評分條默認的星級 |
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,最少半個星級。
運行程式截圖如下