Android中显示在标题上的进度条

今天我们来学习一下Android中显示在Activity标题上的进度条。在这个例子当中我们还能够学习到很多关于AsyncTask的知识。

(1)准备用于显示到界面上的四张图片img01,img02,img03,img04

(2)在Activity的布局文件activity_main.xml中只定义一个线性布局LinearLayout,并为其设置一个id,代码如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
	android:id="@+id/main_layout">


</LinearLayout>

(3)Java代码部分,通过requestWindowFeature(Window.FEATURE_PROGRESS);语句设置Activity标题栏为有进度条风格,然后实例化并启动一个MyTask对象,代码如下:

public class MainActivity extends Activity {
	
	//图片id数组
	private int[] imageIds = { R.drawable.img01, R.drawable.img02,
			R.drawable.img03, R.drawable.img04 };
	
	private LinearLayout mainLayout;
	
	/**
	 * Activity的入口方法
	 */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		//设置标题栏有进度条
		requestWindowFeature(Window.FEATURE_PROGRESS);
		
		setContentView(R.layout.activity_main);
		mainLayout = (LinearLayout)findViewById(R.id.main_layout);
		
		//实例化MyTask并开始执行
		new MyTask().execute();
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}
	/**
	 * 自定义继承AsyncTask的异步类MyTask
	 */
	class MyTask extends AsyncTask<Void, Integer, LinearLayout>{
		
		/**
		 * 在doInBackground()方法之前执行的方法
		 */
		@Override
		protected void onPreExecute() {
			super.onPreExecute();
			//设置标题栏的进度条可见
			setProgressBarVisibility(true);			
		}
		
		/**
		 * 后台执行的耗时操作
		 */
		@Override
		protected LinearLayout doInBackground(Void... params) {
			LinearLayout ll = new LinearLayout(MainActivity.this);
			ll.setOrientation(LinearLayout.VERTICAL);
			ll.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT));
			
			for(int i=1; i<5; i++){
				ImageView iv = new ImageView(MainActivity.this);
				iv.setLayoutParams(new LayoutParams(200, 100));
				iv.setImageResource(imageIds[i-1]);
				
				ll.addView(iv);
				
				new Thread(){
					public void run() {
						try {
							//休眠20毫秒
							Thread.sleep(20);
						} catch (Exception e) {
							e.printStackTrace();
						}
						
					};
				}.start();
				
				//要求更新进度条,会引起调用onProgressUpdate()方法
				publishProgress(i);
			}
			
			return ll;
		}
		
		/**
		 * 更新进度条
		 */
		@Override
		protected void onProgressUpdate(Integer... values) {
			super.onProgressUpdate(values);
			//参数值为0-10000,所以要乘以2500,values[0]取值分别是1,2,3,4
			setProgress(values[0] * 2500);
		}
		
		/**
		 * 后台操作执行完毕后所要执行的方法
		 */
		@Override
		protected void onPostExecute(LinearLayout result) {
			super.onPostExecute(result);
			
			mainLayout.addView(result);
		}
		
	}
}
右键运行android project,效果如下:

Android中显示在标题上的进度条

进度条执行完毕后,界面会显示四张图片。

最后附上源码下载地址:

Android中显示在标题栏上的进度条实现

Android中显示在标题上的进度条,布布扣,bubuko.com

Android中显示在标题上的进度条

上一篇:Android自定义组件系列【1】——自定义View及ViewGroup


下一篇:FastGPU + Cloud Shell 极速部署人工智能计算