Android常用高级组件之星级滑块

1.RatingBar类简介

   RatingBar是另一种滑块,它位于andorid.widget包下,外观是五个星星,可以通过拖动来改变进度,除图片形式外,还有较小的以及较大的两种表现形式。

RatingBar的继承关系        Java.lang.Object/Android.view.View/andorid.widget.ProgressBar/android.widget.AbsSeekBar/andorid.widget.RatingBar

2.main.xml布局文件如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <ProgressBar
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:id="@+id/ProgressBar01"
        android:max="100"
        android:progress="20"
        style="@android:style/Widget.ProgressBar.Horizontal"
        />
    <RatingBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/RatingBar01"
        android:max="5"
        android:rating="1"
        />
</LinearLayout>

2.逻辑代码如下:

package com.example.sample_5_6;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.widget.ProgressBar;
import android.widget.RatingBar;

public class Sample_5_6 extends Activity 
{
    final static double MAX_STAR = 5;
    final static double MAX = 100;
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        RatingBar rb = (RatingBar)findViewById(R.id.RatingBar01);
        rb.setOnRatingBarChangeListener(
                new RatingBar.OnRatingBarChangeListener()
        {
            public void onRatingChanged(RatingBar ratingBar, float rating,
                    boolean fromUser)
            {
                ProgressBar pb = (ProgressBar)findViewById(R.id.ProgressBar01);
                RatingBar rb = (RatingBar)findViewById(R.id.RatingBar01);
                float rate = rb.getRating();
                pb.setProgress((int)((rate/MAX_STAR)*MAX));//将星星数折算成0-100进度值
            }
        });
    }
    public boolean onCreateOptionsMenu(Menu menu) 
    {
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

3.运行结果略.

 

posted @ 2012-09-18 21:40  Edenme  阅读(324)  评论(0编辑  收藏  举报