进度条控件(ProgressBar)、拖动条控件(SeekBar)、星级评分控件(RatingBar)在Android开发中都是比较常用的控件。
进度条用来显示一个耗时动作的进度,但它并不能自动显示进度的变化需要通过方法来控制。进度条样式大体有两种:水平进度条和圆形进度条(即定时进度条和不定时进度条,也叫确定的进度条和不确定的进度条),默认为圆形进度条。圆形进度条无法显示进度比例,只要其可见就会一直转动,表示正在动作。水平进度条可以显示当前完成度。主要属性如下
style 设置风格,值可以为:@android:style/Widget.ProgressBar.Horizontal水平进度条
@android:style/Widget.ProgressBar 中号圆形进度条
@android:style/Widget.ProgressBar.Inverse 中号圆形进度条
@android:style/Widget.ProgressBar.Small小号圆形进度条
@android:style/Widget.ProgressBar.Small.Inverse小号圆形进度条
@android:style/Widget.ProgressBar.Large大号圆形进度条
@android:style/Widget.ProgressBar.Large.Inverse大号圆形进度条
?android:attr/progressBarStyle
?android:attr/progressBarStyleHorizontal
?android:attr/progressBarStyleInverse
?android:attr/progressBarStyleLarge
?android:attr/progressBarStyleLargeInverse
?android:attr/progressBarStyleSmall
?android:attr/progressBarStyleSmallInverse
其中,带有Inverse参数和不带有Inverse参数的style属性区别在于:当进度条控件所在的界面背景颜色为白色时,需要使用带有Inverse参数的style属性,否则进度条将看不见。
visibility 设置进度条是否可见,值为visibility(可见,默认)、invisibility(不可见但占有控件)、gone(不可见不占位置)
max 代表进度条的最大进度
progress 代表当前进度值
secondaryProgress 代表第二进度值,相当缓存值
以上三个属性仅能在水平进度条中。
可用一下方法控制进度条(水平进度条)
setProgress(int) 设置水平进度条的值
getMax() 获取水平进度条的最大值
incrementProgressBy(int) 设置进度条的进度增加或减少, 当参数为正数时进度增加,为负数时进度减少。
如何控制进度条才能使进度条连续的为我们显示进度呢,肯定要使用线程,但是不能直接在Android主线程中通过sleep()达成效果,查过相关资料后,Android中引入了Handler类可以帮助我们在主线程中建立子线程来完成进度条的功能。
SeekBar和RatinfBar都是ProgressBar的子类。SeekBar(水平拖动条)允许通过拖动滑块调节数值,因此可以作为某些属性的设置按钮,如音量的调节。主要属性如下
thumb 使用自定义图片显示拖动块
style="@android:style/Widget.SeekBar"这是老版本的样式,默认情况下就显示当前版本的样式
max 最大值
progress 当前值
progressDrawable 使用自定义图片显示滑过的部分
可以通过添加SeekBar.OnSeekBarChangeListener监听器,监控其进度值变化。
RatingBar(星级评分)常出现在评分项目中,显示的样式为几个五角星,选中后五角星会被填充。主要属性如下
android:numStarts 设置五角星的数量,必须为整数
android:rating 设置星级评分条默认的星级,可以为小数
android:stepSize 步长,设置每次至少需要改变多少个星级,可以为小数
可以通过添加RatingBar.setOnRatingBarChangeListener监听器监控其分数的变化。
布局XML代码如下
MainActivity.class代码如下
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.RatingBar;
import android.widget.RatingBar.OnRatingBarChangeListener;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
ProgressBar pbOne,pbTwo;
RatingBar rb;
SeekBar sb;
TextView tvSeek,tvSeekBar;
Button btnStart,btnEnd;
Handler handler;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
pbOne = (ProgressBar) findViewById(R.id.progressBar1);
pbTwo = (ProgressBar) findViewById(R.id.progressBar2);
rb = (RatingBar) findViewById(R.id.ratingBar);
sb = (SeekBar) findViewById(R.id.seekBar);
tvSeek = (TextView) findViewById(R.id.tv_Seek);
tvSeekBar = (TextView) findViewById(R.id.tv_SeekBar);
btnStart = (Button) findViewById(R.id.btn_start);
btnEnd = (Button) findViewById(R.id.btn_end);
handler = new Handler();
rb.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float rating,
boolean fromUser) {
Toast.makeText(MainActivity.this, "评级为"+rating+"星", Toast.LENGTH_LONG).show();
}
});
sb.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
tvSeek.setText("水平拖动条:修改完成");
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
tvSeek.setText("水平拖动条:修改中");
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
tvSeekBar.setText(progress+"");
}
});
btnStart.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
handler.post(progress);
Toast.makeText(MainActivity.this, "开始进度", Toast.LENGTH_LONG).show();
}
});
btnEnd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
handler.removeCallbacks(progress);
pbOne.setProgress(0);
pbTwo.setVisibility(View.INVISIBLE);
Toast.makeText(MainActivity.this, "终止进度", Toast.LENGTH_LONG).show();
}
});
}
Runnable progress = new Runnable(){
@Override
public void run() {
pbTwo.setVisibility(View.VISIBLE);//圆形进度条显示
pbOne.setProgress(pbOne.getProgress()+10);//设置进度条增加
if(pbOne.getProgress()
效果图如下
你可能感兴趣的:(Android)