android进度条的实现:
进度条英文名 : Progress_Bar
流程 :
创建progressbar进度条,将进度条拖进界面
切换到MainActivity.java文件
绑定控件
控件类型 接收变量 = findViewById(R.id.(控件的id));
bar = (ProgressBar) findViewById(R.id.progressBar1); //寻找进度条的控件
text = (TextView) findViewById(R.id.textView1); //寻找字窗的控件
开启子线程, 在最后面需要添加.start()方法进行启动线程
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
}).start();
由于线程执行的太快 我们应该给线程里面加一个睡眠的方法让它缓慢执行
//让程序每100毫秒执行一次 由于这句话很容易出现异常
//所以我们需要使用try来捕获异常防止程序崩塌
try{
Thread.sleep(100);
}catch{
e.printStackTrace();
}
在线程中设置progressbar的值
bar.setprogressbar(100); //设置进度条的值为100;
由于对耗时操作进行开启子线程 不能在子线程执行耗时操作 子线程不能对UI操作所以要让ui在线程之上执行操作需要实现一个runOnUIThread()方法即可
new runOnUIThread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
});
进度条每更新一次 TextView里面的文字都要做出相对应的变化,所以得先在外面定义一个值然后让里面的线程进行持续执行:
int num = 0;
while(true){
num++ //相当于num = num+1
try{
Thread.sleep(1000); // 设置线程睡眠的时间
}catch{
e.printStacKTrace();
}
// 让Ui在线程之上运行
runOnUiThread(new Runnable(){
@Override
public void run() {
bar.setprogressbar(100); //设置进度条的值
});
}
没一次加载程序页面就会更新相对应的值 需要使用if语句判断 但是多个值判断switch语句效率更高一点:
switch(值){
case 判断值:
执行内容
break;
case 判断值:
执行内容
break;
case 判断值:
执行内容
break;
case 判断值:
执行内容
break;
case 判断值:
执行内容
break;
进度条整体代码如下:
package com.example.progress_bar;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends Activity {
private ProgressBar bar;
private TextView text;
int num = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//对控件进行绑定
Progressbar bar = findViewById(R.id.progressbar1); //获取进度条控件
TextView text = findViewById(R.id.textView1); // 获取字窗控件
new Thread(new Runnable(){ //需要做耗时操作 开启子线程
@Override
public void run() {
// TODO Auto-generated method stub
while(true){ // 对线程进行执行循环直到num到100
num++; // 相当于num = num + 1;
try{ // 防止线程睡眠出错使程序崩溃
Thread.sleep(1000);
}catch{
e.printStackTrace();
}
}
// Ui更新不能在线程里面出现,
//所以要是实现runOnUiThread方法,
//让它在子线程之上执行操作;
runOnUiThread(new Runnable(){
bar.setprogressbar(num); //设置进度条的值;
// 判断num到了多少然后把值显示在TextView窗口上
switch(num){
case 20:
text.setText(String.valueOf(num));
break;
case 40:
text.setText(String.valueOf(num));
break;
case 60:
text.setText(String.valueOf(num));
break;
case 80:
text.setText(String.valueOf(num));
break;
case 100:
text.setText(String.valueOf(num));
break;
}
});
}
}).start(); //让线程启动
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}
效果图: