网络相册:Gallery+AsyncTask+URLConnection 实现异步加载网络图片
来源:互联网 发布:发现值得买网站源码 编辑:程序博客网 时间:2024/05/21 11:27
这个例子需要点基础知识:
- Gallery的使用,这个网上的例子多的是
- 如何使用AsyncTask,这个可以看这里《[Android]异步任务AsyncTask使用解析》
- 使用URLConnection从网络下载图片,这个我在代码中加了很详细的注释
异步加载在Android应用上用处很广泛,这篇例子的Adapter部分完全可以移植到其他的组件中,如ListView。下面,我们来看代码吧:
首先,是最核心的代码ImageAdapter的实现,所有核心的功能都是在这里实现的
public class ImageAdapter extends BaseAdapter{ private List<String> imageUrls; //图片地址list private Context context; public ImageAdapter(List<String> imageUrls, Context context) { this.imageUrls = imageUrls; this.context = context; } public int getCount() { return imageUrls.size(); } public Object getItem(int position) { return imageUrls.get(position); } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { Bitmap image; if(convertView==null){ convertView = LayoutInflater.from(context).inflate(R.layout.item,null); //实例化convertView image = UrlConnectionActivity.imagesCache.get(imageUrls.get(position)); //从缓存中读取图片 if(image==null){ //当缓存中没有要使用的图片时,先显示默认的图片 image = UrlConnectionActivity.imagesCache.get("background_non_load"); //异步加载图片 LoadImageTask task = new LoadImageTask(convertView); task.execute(imageUrls.get(position)); } convertView.setTag(image); } else{ image = (Bitmap) convertView.getTag(); } ImageView imageView = (ImageView) convertView.findViewById(R.id.gallery_image); imageView.setImageBitmap(image); imageView.setScaleType(ImageView.ScaleType.FIT_XY); return convertView; } //加载图片的异步任务 class LoadImageTask extends AsyncTask<String,Void,Bitmap>{ private View resultView; LoadImageTask(View resultView) { this.resultView = resultView; } // doInBackground完成后才会被调用 @Override protected void onPostExecute(Bitmap bitmap) { //调用setTag保存图片以便于自动更新图片 resultView.setTag(bitmap); } //从网上下载图片 @Override protected Bitmap doInBackground(String... params) { Bitmap image=null; try { //new URL对象 把网址传入 URL url = new URL(params[0]); //取得链接 URLConnection conn = url.openConnection(); conn.connect(); //取得返回的InputStream InputStream is = conn.getInputStream(); //将InputStream变为Bitmap image = BitmapFactory.decodeStream(is); is.close(); UrlConnectionActivity.imagesCache.put(params[0],image); //把下载好的图片保存到缓存中 } catch (Exception e) { e.printStackTrace(); } return image; } }}
在ImageAdapter中用到的XML文件:res/layout/item.xml
在Activity中的使用:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/gallery_image"/></LinearLayout>
public class MyActivity extends Activity{ public static HashMap<String,Bitmap> imagesCache=new HashMap<String, Bitmap>(); //图片缓存 private Gallery images_ga; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.url_connection_image); init(); } private void init(){ Bitmap image= BitmapFactory.decodeResource(getResources(),R.drawable.jiazaizhong); imagesCache.put("background_non_load",image); //设置缓存中默认的图片 images_ga = (Gallery) findViewById(R.id.image_wall_gallery); List<String> urls = new ArrayList<String>(); //图片地址List //奶茶MM的图片,嘻嘻 urls.add("http://fujian.xabbs.com/forum/201109/02/160646nn9hjjiimixvkxhe.jpg"); urls.add("http://img1.cache.netease.com/catchpic/A/A9/A9D98040B397C366AE93E67871346561.jpg"); urls.add("http://new.aliyiyao.com/UpFiles/Image/2011/01/13/nc_129393721364387442.jpg"); urls.add("http://pic.viewpics.cn/2011/07/03/naichaMMzhangzetianzuixinzhaopian/18.jpg"); urls.add("http://i1.sinaimg.cn/ent/m/c/2010-01-18/U1819P28T3D2847679F326DT20100118115712.jpg"); urls.add("http://comic.sinaimg.cn/2011/0824/U5237P1157DT20110824161051.jpg"); ImageAdapter imageAdapter = new ImageAdapter(urls,this); images_ga.setAdapter(imageAdapter); }}
- 网络相册:Gallery+AsyncTask+URLConnection 实现异步加载网络图片
- 网络相册:Gallery+AsyncTask+URLConnection 实现异步加载网络图片
- android Gallery实现异步加载网络图片
- AsyncTask实现ListView中异步加载网络图片
- android Gallery实现异步加载图片
- 采用AsyncTask异步加载网络图片
- AsyncTask 异步加载网络图片简单应用
- android Gallery实现异步加载网络图片 并只加载当前停止页面图
- Android_开发 Gallery实现异步加载网络图片 并只加载当前停止页面图
- 异步加载图片AsyncTask
- AsyncTask异步加载图片
- AsyncTask异步加载图片
- 使用AsyncTask实现网络的图片加载
- 使用AsyncTask异步更新UI界面(加载网络图片)
- 异步加载网络图片(多线程,和AsyncTask)
- Android 异步加载图片-AsyncTask
- Android 异步加载图片-AsyncTask
- AsyncTask异步加载图片示例
- Fall through the cracks
- 云应用开发另一些细节总结
- 强制释放端口
- android ToggleButton
- SAP JCo3安装
- 网络相册:Gallery+AsyncTask+URLConnection 实现异步加载网络图片
- ScheduledFuture和RunnableScheduledFuture
- 例解GNU C之零长数组与变长数组
- MessageUI发送邮件
- 启动CEGUI
- 你的变量究竟存储在什么地方?
- sql 语法
- Oracle全文索引!
- XMI转换Java对象