飞道的博客

android 实现进度条的画面加载

615人阅读  评论(0)

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;
	}

}

效果图:


转载:https://blog.csdn.net/qq_45796487/article/details/110633318
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场