在progressDialog之后的ImageView更新秒

时间:2015-07-15 22:03:31

标签: android imageview progressdialog

我使用asynckTask解码文件和onPostExecute我setImageBitmap并调用progressDialog.dismiss()但是在关闭progressDialog之后,imageView需要几秒钟来显示图像。我想要的是progressDialog只有在为用户准备好图像视图时才会消失。我的代码如下:

    class MyTask extends AsyncTask<String, Integer, Bitmap> {
    private final WeakReference<ImageView> imageViewReference;
    private String mainImageString;
    private Context context;
    ProgressDialog progressDialog;

    public MyTask(ImageView imageView, Context mContext) {
        imageViewReference = new WeakReference<ImageView>(imageView);
        context = mContext;
    }
    @Override
    protected void onPreExecute() {
        progressDialog= ProgressDialog.show(MyClass.this, "Progress Dialog Title Text","Process Description Text", true);
    }
    // Decode image in background.
    @Override
    protected Bitmap doInBackground(String... params) {
        mainImageString = params[0];
        return BitmapFactory.decodeFile(mainImageString);
    }

    @Override
    protected void onPostExecute(Bitmap bitmap) {
        if (imageViewReference != null && bitmap != null) {
            final ImageView imageView = imageViewReference.get();
            if (imageView != null) {
                imageView.setImageBitmap(bitmap);
                progressDialog.dismiss();
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

当你基本上设置你的位图时,你就是&#34;建立&#34;它在UI线程上。我建议在doInBackground回调中调用setImageBitmap,然后关闭对话框。

答案 1 :(得分:0)

你可以这样做......

     @Override
protected void onPostExecute(Bitmap bitmap) {
    if (imageViewReference != null && bitmap != null) {
        final ImageView imageView = imageViewReference.get();
        if (imageView != null) {
               imageView.setImageBitmap(bitmap);
               handler.postDelayed(new Runnable() {
               public void run() { 
                 progressDialog.dismiss();
                 } 
               }, 1000); //time for image to appear in image view
        }
    }

请注意这不是一种万无一失的方式..但这是一种简单的方式 - 目前我能想到的......

我能想到的其他黑客是扩展ImageView并覆盖onDraw()。在onDraw()中调用super(),一旦调用super()返回,则关闭对话框。这是更准确的做法。

类似的东西:

onDraw(){
  super();
  onDismissDialogBox()//send an even to activity to dismiss dialog box 
}