所以我有一个使用ImageView的活动。我的目标是让活动开始并异步地获取我需要的图像。在获取图像时,我想显示某种旋转加载符号来代替图像。我已经尝试将AsyncTask用作一个单独的类,但遇到了与修改另一个活动的视图有关的问题。我在活动中尝试了一个匿名的Runnable类,但它似乎没有产生我期望的效果。有人可以建议吗?
已解决:只需要活动中的处理程序
final Handler handler = new Handler() {
public void handleMessage(Message msg) {
ImageView qrCode = (ImageView)findViewById(R.id.qr);
qrCode.setImageBitmap((Bitmap)msg.obj);
}
};
new Thread(new Runnable(){
public void run() {
BitmapFactory.Options bmOptions;
bmOptions = new BitmapFactory.Options();
bmOptions.inSampleSize = 1;
int retry = 0;
Bitmap bm = null;
while(retry < 50 && bm == null){
bm = LoadImage(image_URL, bmOptions);
if(bm == null){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
retry++;
}
Message msg = new Message();
msg.obj = bm;
handler.sendMessage(msg);
return;
}
}).start();
`
答案 0 :(得分:0)
使用imageview在视图内放置一个进度对话框。 设置imageview ImageView.visibility(View.INVISIBLE);
在AsyncTask中的preExecute()
显示旋转对话框,然后在AsyncTask的doInBackground()中进行提取
在onPostExecute()中,通过更改可见性并关闭对话框或将其可见性设置为View.GONE来显示您的imageview
答案 1 :(得分:0)
Android的线程开发者指南应该可以帮到你。它有AsyncTask示例,几乎完全符合您的要求: Android Threading Guide
如果你没有实现publishProgress()方法,并且只实现doInBackground来获取数据,而onPostExecute则用来更新UI,那么默认情况下它应该为你提供旋转图标来指示它正在加载。请记住,onPostExecute在主UI线程上运行,因此您无法从那里进行任何网络调用
答案 2 :(得分:0)