执行 AsyncTask 时的 Android 自定义进度指示器

标签 android android-asynctask progress

运行 AsyncTask 时,我想显示一个进度指示器。这个存货很丑,所以我自己做了一个布局。然而问题就在这里,它是一个单独的布局,这意味着我需要一个新的 Activity 来显示它。

我以为我可以 startActivity(~progressActivity~) 然后……销毁它?但是似乎不可能阻止 parent 的 child Activity 。

我可以隐藏 AsyncTask-invoking-activity 上的进度指示器,然后在处理时让它显示并隐藏布局的其余部分。现在我的主布局中需要两个子布局,每次都隐藏一个。这听起来像是 hack,我不太喜欢它。

有什么建议吗?

最佳答案

如果您需要对 ProgressBar 进行更多控制,可以使用 WindowManager 在所有内容之上添加一个 View 。它可以在没有任何额外的布局、 Activity 或窗口的情况下完成。您可以像在常规 View 中一样控制动画、触摸、位置和可见性。完整的工作代码:

final ProgressBar view = new ProgressBar(TestActivity.this);
view.setBackgroundColor(0x7f000000);
final LayoutParams windowParams = new WindowManager.LayoutParams();
windowParams.gravity = Gravity.CENTER;
windowParams.height = WindowManager.LayoutParams.WRAP_CONTENT;
windowParams.width = WindowManager.LayoutParams.WRAP_CONTENT;
windowParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
        | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
        | WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN;
windowParams.format = PixelFormat.TRANSLUCENT;
windowParams.windowAnimations = 0;

new AsyncTask<Integer, Integer, Integer>() {
    public void onPreExecute() {
        // init your dialog here;
        getWindowManager().addView(view, windowParams);
    }

    public void onPostExecute(Integer result) {
        getWindowManager().removeView(view);
        // process result;
    }

    @Override
    protected Integer doInBackground(Integer... arg0) {
        // do your things here
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
}.execute();

关于执行 AsyncTask 时的 Android 自定义进度指示器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15085874/

相关文章:

android - SD 卡存储与 Android 系统存储

android - AsyncTask 的问题

android - 地理围栏服务

java - Android 保存 RSA 私钥和公钥

java - 无法使用异步任务将图像加载到 imageview 中

android - 异步任务.. 无法调用 executeOnExecutor()

python - 显示时间进度

ios - 如何在 PFImageView 中显示 PFFile 下载的进度

upload - Google 云端硬盘上传进度条

android - 如何查看哪个用户在 Google Play 中上传了 apk 文件?