Android之进度条1

第一种方法(比较简单): 

package com.example.dialogdemo;
 
import java.util.Random;
 
import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.SystemClock;
import android.view.Menu;
 
public class MainActivity extends Activity {
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         
         
       final ProgressDialog progressDialog=new ProgressDialog(this);
       //进度条设置成水平
       progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
       //设置最大值
       progressDialog.setMax(100);
       progressDialog.show();
       //线程
       new Thread(new Runnable() {
         
        private int progress;
 
        @Override
        public void run() {
            // TODO Auto-generated method stub
            while(true){
                 
                progressDialog.setProgress(progress);
                progress++;
                SystemClock.sleep(new Random().nextInt(100));
                if(progress==100){
                    progressDialog.dismiss();
                }
            }
 
        }
    }).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.main, menu);
        return true;
    }   
}

  

效果执行图:进入程序只能执行一次,相当于数据的“导入”。

第二中方法(仿Andorid应用的安装):

package com.example.progressdialog;
 
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
 
public class ProgressDialogActivity extends Activity {
     
    //任务大小
    private int[] data = new int[100];
    //已经完成数据
    private int hasdata = 0;
    //完成程度 
    private int status = 0;
    //设置标记
    final int SIGN = 0x11;
    Handler h;
    //定义一个ProgressDialog
    ProgressDialog pd ;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = (Button)findViewById(R.id.button);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                showDialog(SIGN);
            }
        });
        h = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                switch (msg.what) {
                case 0x1111:
                    //设置状态
                    pd.setProgress(status);
                    break;
                default:
                    break;
                }
                pd.setProgress(status);
            }
             
        };
         
    }
    //调用onPrepareDialog()方法之后
    @Override
    protected Dialog onCreateDialog(int id, Bundle args) {
        // TODO Auto-generated method stub
        pd = new ProgressDialog(this);
        pd.setMax(100);
        pd.setMessage("正在安装中");
        pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
        pd.setCancelable(false);
        return pd;
    }
    //调用showDialog()之后和调用onCreateDialog之前
    @Override
    protected void onPrepareDialog(int id, Dialog dialog, Bundle args) {
        // TODO Auto-generated method stub
        switch (id) {
        case SIGN:
            pd.incrementProgressBy(-pd.getProgress());
            new Thread(){
                @Override
                public void run() {
                    while(status < 100){
                        status = dowork();
                        Message msg = new Message();
                        msg.what = 0x1111;
                        h.sendMessage(msg);
                    }
                    if(status >= 100){
                        //撤销
                        pd.dismiss();
                    }
                }    
            }.start();
            break;
        }
    }
    public int dowork(){
        data[hasdata ++] = (int)(Math.random()*100);
        try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return hasdata;
    }
}

  

执行效果图:点击按钮可重复执行

 

posted @ 2016-01-05 16:18  冷的锋刃  阅读(305)  评论(0编辑  收藏  举报