我正在尝试单击ImageView时保存图像。因为保存需要一些时间,所以我想使用某种指示器,表明该应用程序正在运行。我尝试使用Snackbar。我的代码如下所示:
File image = new File(directory, "image.png");
if(!image.exists()){
Snackbar bar = Snackbar.make(getActivity().findViewById(R.id.some_layout), "snackText", Snackbar.LENGTH_INDEFINITE);
bar.show();
FileOutputStream outStream = null;
try {
outStream = new FileOutputStream(image);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);
outStream.flush();
outStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
bar.dismiss();
}
该ImageView的public void onClick(View view)
中的所有内容。
问题是,Snackbar仅在保存图像后显示。我试图用invalidate()强制更新UI,并尝试了不启动具有相同结果的新线程的情况。
任何想法都将不胜感激!
答案 0 :(得分:0)
请不要在此处使用快餐栏,这样编辑代码: if(!image.exists()){
final ProgressDialog progressDialog =ProgressDialog.show(this, "","Please Wait...", true);
Thread t = new Thread(new Runnable() {
@Override
public void run() {
FileOutputStream outStream = null;
try {
outStream = new FileOutputStream(image);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream);
outStream.flush();
outStream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
runOnUiThread(new Runnable() {
@Override
public void run() {
progressDialog.dismiss();
}
});
}
});
t.start();
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}