今天我们来学习一下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,效果如下:
进度条执行完毕后,界面会显示四张图片。
最后附上源码下载地址: