-2

我想在启动时通过带有actual应用程序负载百分比的进度条为我的应用程序显示启动画面。

我有以下要求/查询 -

  1. 我应该使用哪个组件来显示进度条
  2. 如果闪屏本身是应用程序的一部分,如何计算负载百分比
  3. 触摸启动画面时,我想突出显示进度条
4

2 回答 2

1

您可以创建线程或使用异步任务并创建自定义进度条

asynctask 示例(仅伪代码)

private class SplashLoading extends AsyncTask<Variable, Variable, Variable> {

     @Override
     protected void onPreExecute(Variable) {
         Show the progress UI in here
     }
     @Override
     protected Long doInBackground(Variable) {
        do the heavy task here and don't forget to publish the progress
     }

     @Override
     protected void onProgressUpdate(Variable) {
         set the progress here
     }

     @Override
     protected void onPostExecute(Variable) {
         what will you do after it complete?
     }
 }

我的 asynctask 伪代码由 4 个函数组成

  1. onPreExecute 将在任务执行后立即在 UI 线程上调用。此步骤通常用于设置任务,例如通过在用户界面中显示进度条。

  2. 在 onPreExecute() 执行完成后,将立即在后台线程上调用 doInBackground。此步骤用于执行可能需要很长时间的后台计算。

  3. onProgressUpdate 将在调用 publishProgress(Progress...) 后在 UI 线程上调用。执行的时间是不确定的。此方法用于在后台计算仍在执行时在用户界面中显示任何形式的进度。例如,它可用于动画进度条或在文本字段中显示日志。

  4. onPostExecute(Result) 将在后台计算完成后在 UI 线程上调用。后台计算的结果作为参数传递给该步骤。

您还可以添加 onCancelled() 以防您想在任务取消时进行处理

于 2012-10-23T04:33:27.860 回答
0

试试这个:我试过了,这没有错误

/**
 * Async class to get News
 * 
 */
protected class AsynchTask extends AsyncTask<Void, Integer, Integer> {

    @Override
    protected void onPreExecute() {

    }

    @Override
    protected Integer doInBackground(Void... args) {

        download();

        return 1;
    }

    private void download() {
        // We are just imitating some process thats takes a bit of time
        // (loading of resources / downloading)
        int count = 10;
        for (int i = 0; i < count; i++) {

            // Update the progress bar after every step
            int progress = (int) ((i / (float) count) * 100);
            publishProgress(progress);

            // Do some long loading things
            try {
                Thread.sleep(2000);
            } catch (InterruptedException ignore) {
            }
        }

    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
        progressBar1.setProgress(values[0]);
    }

    @Override
    protected void onPostExecute(Integer a) {
        progressBar1.setVisibility(View.GONE);
    }
}
于 2012-10-23T04:46:26.433 回答