首页 > 试题广场 >

当前界面有显示下载进度的ProgressBar,请写一个下载

[问答题]

当前界面有显示下载进度的ProgressBar,请写一个下载线程,以10s的时间完成ProgressBar其进度显示工作;

final ProgressBar progressBar=new ProgressBar(this);
progressBar.setMax(10);
progressBar.setProgress(0); final Handler handler1 = new Handler(){ public void HandlerMessage(Message msg){ int x=msg.what; progressBar.setProgress(x);
    }
}; new Thread(new Runnable(){ public void run() { for(int i=1;i<=10;i++){ try {
                Thread.sleep(1000);
            } catch(Exception e){
                e.printStackTrace();
            } handler1.sendEmptyMessage(i);
        }
    }
}).start(); 
发表于 2017-09-02 10:13:58 回复(0)

主要思路是通过,在主线程中显示进度条,然后通过开启子线程来模拟耗时操作,并且设置耗时操作时间为10s,并且在耗时操作进行完毕之后取消正在显示的进度条。主要代码如下。

public class ShowProgressBarActivity extends AppCompatActivity { 
 @Override
 protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); 
 setContentView(R.layout.test);
 showProgressDialog(); }
/**
 * 显示进度条
 */
public void showProgressDialog() {
    ProgressDialog progressDialog = new ProgressDialog(ShowProgressBarActivity.this);
    progressDialog.setTitle("正在下载");
    progressDialog.show();
    new Thread(new Runnable() {
        @Override
        public void run() {
            for (int showTime = 0; showTime < 10; showTime++) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            progressDialog.dismiss();
        }
    }).start();
}

}

发表于 2017-01-23 19:04:10 回复(4)
是用另一个任务来计算当前下载量,ProgressBar 接收当前下载进度,并显示

import java.text.DecimalFormat;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * Created by WZW on 2017/08/08.
 * 当前界面有显示下载进度的ProgressBar,请写一个下载线程,以10s的时间完成ProgressBar其进度显示工作;
 */
public class Main {
    public static void main(String args[]){
        Thread thread=new Thread(new ProgressBar());
        thread.start();
    }

}
class CalauteNow implements Callable<Integer>{

    static int now=0;
    @Override
    public Integer call() throws Exception {
        Thread.sleep(1000);
        now+=10;
        return now;
    }
}
class ProgressBar implements Runnable{
    int now=0;

    @Override
    public void run() {
        try {
            while (now <= 100) {
                Double persent = (now * 1.0 / 100.0) * 100;
                DecimalFormat decimalFormat=new DecimalFormat("0.00");
                System.out.print("\r完成度:" + decimalFormat.format(persent) + "%  ");
                for (int i = 0; i < persent / 5; i++) {
                    System.out.print(">");
                }
                CalauteNow calauteNow = new CalauteNow();
                FutureTask<Integer> task = new FutureTask<Integer>(calauteNow);
                Thread thread = new Thread(task);
                thread.start();
                now = task.get();
            }
        }catch (InterruptedException e){
            e.printStackTrace();
        }catch (ExecutionException e){
            e.printStackTrace();
        }
    }
}

发表于 2017-08-08 09:29:44 回复(0)