![[android] 练习使用ListView(三),第1张 [android] 练习使用ListView(三),第1张](/aiimages/%5Bandroid%5D+%E7%BB%83%E4%B9%A0%E4%BD%BF%E7%94%A8ListView%EF%BC%88%E4%B8%89%EF%BC%89.png)
解决OOM和图片乱序问题
package com.androID.test;import java.io.inputStream; java.net.httpURLConnection; java.net.URL; com.nostra13.universalimageloader.core.ImageLoader; com.nostra13.universalimageloader.core.ImageLoaderConfiguration; com.nostra13.universalimageloader.core.assist.FailReason; com.nostra13.universalimageloader.core.Listener.ImageLoadingListener; androID.app.Activity; androID.graphics.Bitmap; androID.graphics.BitmapFactory; androID.graphics.drawable.BitmapDrawable; androID.os.AsyncTask; androID.os.Bundle; androID.support.v4.util.LruCache; androID.vIEw.VIEw; androID.vIEw.VIEwGroup; androID.Widget.BaseAdapter; androID.Widget.ImageVIEw; androID.Widget.listadapter; androID.Widget.ListVIEw; androID.Widget.TextVIEw;public class MainActivity extends Activity { private ListVIEw lv_images; @OverrIDe protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); lv_images = (ListVIEw) findVIEwByID(R.ID.lv_images); ImageLoaderConfiguration configuration=ImageLoaderConfiguration.createDefault(this); ImageLoader.getInstance().init(configuration); listadapter adapter = new ImageAdapter(); lv_images.setAdapter(adapter); } /** * 适配器 * @author taoshihan * */ class ImageAdapter BaseAdapter { ListVIEw mListVIEw; private LruCache<String,BitmapDrawable> mImageCache; public ImageAdapter() { int maxSize=(int) (Runtime.getRuntime().maxMemory()/1024)/8; mImageCache=new LruCache<String,1)">(maxSize){ int sizeOf(String key,BitmapDrawable drawable) { return drawable.getBitmap().getByteCount()/1024; }; }; } @OverrIDe public VIEw getVIEw( position,VIEw convertVIEw,VIEwGroup parent) { //第三个参数就是ListVIEw if(mListVIEw==null){ mListVIEw=(ListVIEw) parent; } String url=(String) getItem(position); VIEw vIEw; if(convertVIEw!=){ vIEw=convertVIEw; }else{ vIEw=VIEw.inflate(getApplicationContext(),R.layout.image_item,); } ImageVIEw imageVIEw=(ImageVIEw) vIEw.findVIEwByID(R.ID.tv_image); 给ImageVIEw设置标签 imageVIEw.setTag(url); BitmapDrawable bitmapDrawable=getBitmapFromMemoryCache(url); if(bitmapDrawable!=){ 读取缓存图片 imageVIEw.setimageDrawable(bitmapDrawable); }{ 读取网络图片 ImageWorkerTask task= ImageWorkerTask(mListVIEw,url); task.execute(url); } return vIEw; } * 从缓存中读取图片 * @param key * @return */ BitmapDrawable getBitmapFromMemoryCache(String key) { if(mImageCache.get(key)!= mImageCache.get(key); } return ; } addBitmapToMemoryCache(String key,BitmapDrawable drawable){ if(getBitmapFromMemoryCache(key)==){ mImageCache.put(key,drawable); } } @OverrIDe getCount() { Todo auto-generated method stub Images.IMAGE_URLS.length; } @OverrIDe public Object getItem( position) { Images.IMAGE_URLS[position]; } @OverrIDe long getItemID( position; } * 异步任务 * taoshihan * class ImageWorkerTask extends AsyncTask<String,VoID,1)">{ ImageVIEw imageVIEw; ImageWorkerTask(ListVIEw parent,String imageUrl) { 在ListVIEw中通过标签找到ImageVIEw控件 this.imageVIEw=(ImageVIEw) parent.findVIEwWithTag(imageUrl); } @OverrIDe protected BitmapDrawable doInBackground(String... params) { String imageUrl=params[0]; Bitmap bitmap=downLoadBitmap(imageUrl); BitmapDrawable drawable= BitmapDrawable(getApplicationContext().getResources(),bitmap); addBitmapToMemoryCache(imageUrl,drawable); drawable; } 下载图片 Bitmap downLoadBitmap(String imageUrl) { Bitmap bitmap=; try { URL url= URL(imageUrl); httpURLConnection conn=(httpURLConnection) url.openConnection(); conn.setConnectTimeout(10000); inputStream is=conn.getinputStream(); bitmap=BitmapFactory.decodeStream(is); } catch (Exception e) { } bitmap; } 下载完成的 @OverrIDe onPostExecute(BitmapDrawable result) { if(imageVIEw!=null&&result!=){ imageVIEw.setimageDrawable(result); } } } } static class Images{ final static String[] IMAGE_URLS = String[]{ "http://img.my.csdn.net/uploads/201508/05/1438760758_3497.jpg","http://img.my.csdn.net/uploads/201508/05/1438760758_6667.jpg" }; }}
总结
以上是内存溢出为你收集整理的[android] 练习使用ListView(三)全部内容,希望文章能够帮你解决[android] 练习使用ListView(三)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)