要注意的问题:1.android4.0后,代码不能写在ui线程,急oncreate方法里,要进行异步处理。
2.想想,就是通过url取网络图片嘛,我直接给他一个url好了嘛,然后它就给我取出来。 这边分享一个比较简洁的实现方式:
private class DownLoadImage extends AsyncTask<String, Integer, Bitmap> {
ImageSwitcher imageSwitcher;
public DownLoadImage(ImageSwitcher is) {
this.imageSwitcher = is;
}
protected Bitmap doInBackground(String... urls) {
System.out.println("异步加载图片开始!");
String url =urls[0];//"http://ww3.sinaimg.cn/bmiddle/6e91531djw1e8l3c7wo7xj20f00qo755.jpg";
System.out.println(url);
Bitmap tmpBitmap = null;
try {
InputStream is = new java.net.URL(url).openStream();
tmpBitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (Exception e) {
e.printStackTrace();
Log.i("KK下载图片", e.getMessage());
}
return tmpBitmap;
}
@Override
protected void onProgressUpdate(Integer... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
System.out.println("进程进度:"+values);
}
protected void onPostExecute(Bitmap result) {
//TODO:
//把bitmap转drawable
Resources res=getResources();
Drawable bd=new BitmapDrawable(res,result);
imageSwitcher.setImageDrawable(bd);
System.out.println("异步加载图片完成!");
}
}
再在ui线程中调用 new DownLoadImage(switcher).execute(img_url);就可以啦。 函数里的 ImageSwitcher imageSwitcher;可以换成imageview或者其他控件
上面的方法读取图片也就用到这两行
InputStream is = new java.net.URL(url).openStream();
tmpBitmap = BitmapFactory.decodeStream(is);
很简洁,可是问题来了: 我想搞个进度条来显示图片下载的进度,这个inputstream好像过度封装了。
这让我想起了那张阴阳图,可能要实现进度条,我就要回去用代码量比较多的方法,懂得朋友留个言哈!