Android的进度条与拖动条

时间:2021-07-14 09:01:35
一.进度条
进度条,ProgressBar,分为环形和水平条行, 首先看下效果图,Progress进度加载。

Android的进度条与拖动条
进度条XML中的属性
        style 设置ProgressBar样式风格,可以自定义,系统也自带有样式。

                默认为环形样式

               @android:style/Widget.ProgressBar.Horizontal 水平进度条(粗)

               @android:style/Widget.ProgressBar.Inverse 普通大小环形进度条

               @android:style/Widget.ProgressBar.Large 大环形进度条

               @android:style/Widget.ProgressBar.Large.Inverse 大环形进度条

               @android:style/Widget.ProgressBar.Small 小环形进度条

              @android:style/Widget.ProgressBar.Small.Inverse 小环形进度条

      max 设置进度条最大值

      progress 设置进度条已完成的进度值

对应java代码 则是加上get 与 set

上图对应的java代码如下

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 找到控件
final ProgressBar bigProgressBar = (ProgressBar) findViewById(R.id.bigprogressBar);
final ProgressBar smallProgressBar = (ProgressBar) findViewById(R.id.smallprogressBar);
final TextView tv_progress1 = (TextView) findViewById(R.id.tv_progress1);
final TextView tv_progress2 = (TextView) findViewById(R.id.tv_progress2);

// 匿名内部类实现按钮点击事件,开始加载
findViewById(R.id.btn_load).setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
start(bigProgressBar, tv_progress1);
start(smallProgressBar, tv_progress2);
}
});
}

// 进度条开始变化的方法
public void start(final ProgressBar progressBar, final TextView textView) {
// 耗时任务放在子线程种进行
new Thread() {
private int nowProgress;
private int maxProgress;

public void run() {
// 得到进度条当前的值
nowProgress = progressBar.getProgress();
// 得到进度条最大值
maxProgress = progressBar.getMax();
// 当当前进度小于最大进度值时
while (nowProgress < maxProgress) {
nowProgress++;
progressBar.setProgress(nowProgress);
// 表示在UI线程种更新TextView因为子线程不能更新UI
runOnUiThread(new Runnable() {

@Override
public void run() {
// 设置TextView的内容
textView.setText(nowProgress + "/" + maxProgress);
}
});
try {
// 延时模拟加载进度
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
}.start();
}
}

二.拖动条

拖动条 SeekBar 外观和水平进度条相似,不过拖动条顾名思义为可拖动的水平进度条

首先看效果图 SeekBar改变手机音量

Android的进度条与拖动条

SeekBar与ProgressBar类似 依然有 max 与 progress属性,对应java代码为set  get

SeekBar有监听事件 即 setOnSeekBarChangeListener()

上图效果java代码如下

	protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 找到SeekBar
SeekBar seekBar = (SeekBar) findViewById(R.id.seekbar);
// 获取音量管理器
audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);
// 获取当前音乐音量的值 STREAM_MUSIC
int index = audioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
// 获取音乐音量的最大值
int max = audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
// 设置拖动条当前值
seekBar.setProgress(index);
// 设置拖动条的最大值
seekBar.setMax(max);

seekBar.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

@Override
public void onStopTrackingTouch(SeekBar seekBar) {
// 拖动停止时调用
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {
// 拖动开始时调用

}

@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// 拖动改变时调用
// 获取seeKbar的当前值
int seekBarvalue = seekBar.getProgress();
// 设置音量大小,并在UI上显示 AudioManager.FLAG_SHOW_UI
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, seekBarvalue, AudioManager.FLAG_SHOW_UI);
}
});
}
}