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

本文介绍如何使用Android中的RatingBar组件,并通过实例展示如何让RatingBar与ProgressBar进行交互,实现从星级评分到进度条变化的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.运行结果略.

 

转载于:https://www.cnblogs.com/yujiaqiang/archive/2012/09/18/2691538.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值