Android学习 21->进度条之SeekBar和RatingBar

本文详细介绍了在Android开发中如何使用SeekBar和RatingBar。SeekBar支持手动调整进度,而RatingBar则用于物品评价。文章展示了如何监控SeekBar的变化、设置最大值、进度和背景样式,以及实现自动运行布局。同时,对于RatingBar,讨论了其基于SeekBar和ProgressBar的特性,包括样式设置、星星数量和当前评分值。最后,提供了具体的XML布局和代码示例。
 我们在播放器中使用进度条时就要用到可手动拖动的进度条SeekBar;当我们在对物品进行评价的时候一般都会使用到评分进度条RatingBar。

        SeekBar是一种特殊的进度条,其与ProgressBar的区别在于,SeekBar支持用户手动调整进度,可以实现进度条的个性化设置。

        监控SeekBar的进度变化的实现方法如下:
seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener(){
@Override
public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) {
  ...//fromUser参数标识变化是否来自用户
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
  ...//开始触摸手势
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
    ...//结束触摸手势
  }
});
        在默认情况下,SeekBar的最大值为100,通过setMax()方法可以设置SeekBar的最大值。设置SeekBar的进度的方法如下:
public synchronized void setProgress(int progress)
public synchronized void setSecondaryProgress(int secondaryProgress)
        我们可以通过android:progressDrawable属性来设置进度条背景;android:thumb属性来设置拖动块的样式。由于Seekbar继承自ProgressBar,所以它还具有ProgressBar的各种属性设置。

    其系统样式如下图所示:

      实现其可自动运行的布局及代码如下:

        activity_seekbar_layout.xml布局:

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <SeekBar
        android:id="@+id/seekbar1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="15dp"
        android:layout_marginRight="15dp"
        android:layout_marginTop="30dp"
        android:max="100" />

</LinearLayout>
</span></span></span>


SeekBarActivity.java代码:

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;">package com.sc.android.ui.bar;

import android.app.Activity;
import android.os.Bundle;
import android.widget.SeekBar;

import com.sc.android.R;

public class SeekBarActivity extends Activity {

	private SeekBar mSeekBar;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_seekbar_layout);

		mSeekBar = (SeekBar) findViewById(R.id.seekbar1);

		new Thread(new Runnable() {

			@Override
			public void run() {
				for (int i = 0; i < 100; i++) {
					try {
						Thread.sleep(100);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					mSeekBar.incrementProgressBy(i);
				}
			}
		}).start();
	}
}
</span></span></span>


RatingBar是基于SeekBar和ProgressBar的扩展,用星型来显示等级评定。使用RatingBar的默认大小时,用户可以触摸/拖动或使用键来设置评分,它有两种样式(小风格用ratingBarStyleSmall,大风格用ratingBarStyleIndicator),其中大的只适合指示,不适合于用户交互。
  当使用可以支持用户交互的RatingBar时,无论将控件(widgets)放在它的左边还是右边都是不合适的。
  只有当布局的宽被设置为wrap content时,设置的星星数量(通过函数setNumStars(int)或者在XML的布局文件中定义)将显示出来(如果设置为另一种布局宽的话,后果无法预知)。
  次级进度一般不应该被修改,因为他仅仅是被当作星型部分内部的填充背景。
布局文件中定义控件以及属性,这里主要需要指定的是总星星数量,和当前的值,也就是总级别跟当前级别的量。
       通过style="?android:attr/   "属性来设置星星的大小当/ 后面为ratingBarStyleSmall是小的,ratingBarStyleIndicator为中等的,默认的是大的;ratingBarStyleIndicator属性是设置星星个数;android:rating属性设置当前评分值。

   以下用一个简单的布局来实现的效果:

    其xml布局如下:

<span style="font-size:18px;"><span style="font-size:18px;"><span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <RatingBar
        android:id="@+id/ratingbar1"
        style="?android:attr/ratingBarStyleSmall"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:numStars="4"
        android:rating="0.5" />

    <RatingBar
        android:id="@+id/ratingbar2"
        style="?android:attr/ratingBarStyleIndicator"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:numStars="5"
        android:rating="1" />

    <RatingBar
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:numStars="6"
        android:rating="1.5" />

</LinearLayout></span></span></span>


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值