我使用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();
}
}
}
}
答案 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
}