listview加载显示图片

public class ImageAndTextListAdapter extends ArrayAdapter<ImageAndText> {

	    private ListView listView;
	    private AsyncImageLoader asyncImageLoader;

	    public ImageAndTextListAdapter(Activity activity, List<ImageAndText> imageAndTexts, ListView listView) {
	        super(activity, 0, imageAndTexts);
	        this.listView = listView;
	        asyncImageLoader = new AsyncImageLoader();
	    }

	    public View getView(int position, View convertView, ViewGroup parent) {
	        Activity activity = (Activity) getContext();

	        // Inflate the views from XML
	        View rowView = convertView;
	        ViewCache viewCache;
	        if (rowView == null) {
	            LayoutInflater inflater = activity.getLayoutInflater();
	            rowView = inflater.inflate(R.layout.image_and_text_row, null);
	            viewCache = new ViewCache(rowView);
	            rowView.setTag(viewCache);
	        } else {
	            viewCache = (ViewCache) rowView.getTag();
	        }
	        ImageAndText imageAndText = getItem(position);

	        // Load the image and set it on the ImageView
	        String imageUrl = imageAndText.getImageUrl();
	        ImageView imageView = viewCache.getImageView();
	        imageView.setTag(imageUrl);
	        Drawable cachedImage = asyncImageLoader.loadDrawable(imageUrl, new ImageCallback() {
	            public void imageLoaded(Drawable imageDrawable, String imageUrl) {
	                ImageView imageViewByTag = (ImageView) listView.findViewWithTag(imageUrl);
	                if (imageViewByTag != null) {
	                    imageViewByTag.setImageDrawable(imageDrawable);
	                }
	            }
	        });
			if (cachedImage == null) {
				imageView.setImageResource(R.drawable.default_image);
			}else{
				imageView.setImageDrawable(cachedImage);
			}
	        // Set the text on the TextView
	        TextView textView = viewCache.getTextView();
	        textView.setText(imageAndText.getText());

	        return rowView;
	    }

}-------------------------------------------------------------------------------------------------
public class AsyncImageLoader {

     private HashMap<String, SoftReference<Drawable>> imageCache;               public AsyncImageLoader() {             imageCache = new HashMap<String, SoftReference<Drawable>>();         }               public Drawable loadDrawable(final String imageUrl, final ImageCallback imageCallback) {             if (imageCache.containsKey(imageUrl)) {                 SoftReference<Drawable> softReference = imageCache.get(imageUrl);                 Drawable drawable = softReference.get();                 if (drawable != null) {                     return drawable;                 }             }             final Handler handler = new Handler() {                 public void handleMessage(Message message) {                     imageCallback.imageLoaded((Drawable) message.obj, imageUrl);                 }             };             new Thread() {                 @Override                 public void run() {                     Drawable drawable = loadImageFromUrl(imageUrl);                     imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));                     Message message = handler.obtainMessage(0, drawable);                     handler.sendMessage(message);                 }             }.start();             return null;         }              public static Drawable loadImageFromUrl(String url) {            URL m;            InputStream i = null;            try {                m = new URL(url);                i = (InputStream) m.getContent();            } catch (MalformedURLException e1) {                e1.printStackTrace();            } catch (IOException e) {                e.printStackTrace();            }            Drawable d = Drawable.createFromStream(i, "src");            return d;        }               public interface ImageCallback {             public void imageLoaded(Drawable imageDrawable, String imageUrl);         }

}
				
时间: 2024-08-10 02:48:29

listview加载显示图片的相关文章

listView加载显示图片(缓存)

我用的是异步加载图片的方式,并且使用了缓存的方式. 1.这是继承了AsyncTask<String, Void, Bitmap>的MyTask类,用异步加载图片 public class MyTask extends AsyncTask<String, Void, Bitmap> { private ImageView imageView; private LruCache<String, Bitmap> lruCache; /** * 构造方法,需要把ImageVie

预加载显示图片的艺术

一般情况下网页中的图片都是随文档流依次加载的,什么时候用到则什么时候加载,但是有些时候这样的加载方式往往会影响用户体验,比如鼠标hover变换背景图片的时候,只有鼠标移入才会对变换的图片进行加载,这样就可能会出现片刻的加载空白现象:又比如图片显示后隐藏再显示网站内容等也是同样的道理. 为了在必要的时候增加用户体验,提高网页的交互逼格,这里不得不介绍下图片预加载的艺术啦. 那么什么是图片预加载呢? 道理很简单啦,虽然某些图片一时半会我用不到,但是为了避免使用时出现的措手不及的现象,我还是乖乖把它们

ListView 加载图片错乱问题

ListView 图片错乱的根本问题是:ListView 布局复用导致的,也就是复用convertView导致的 解决: 1,用第三方的ImageLoader 2,自己处理最主要的就是给ImageView设置Tag,保证ImageView要加载的图片就是从网络上获取的图片 3,通过ListView Item 移除屏幕监听RecyclerListener方式 代码: 1 //设置默认图片 imgHolder.imgView.setImageResource(R.drawable.ic_launch

Android错误之ListView加载错位_ListView图片错位

又遇到ListView加载item时,多个item中的图片会错位的情况 现象如下图,同一个人的头像显示的乱七八糟 找了一张图,很好地说明了问题的原因 问题原因就在于convertView的重用,当重用 convertView 时,最初一屏显示 7 条记录, getView 被调用 7 次,创建了 7 个 convertView, 当 Item1 划出屏幕, Item8 进入屏幕时,这时没有为 Item8 创建新的 view 实例, Item8 复用的是Item1时候创建的view, Item8

TextView加载html图片异步显示(Picasso)

项目中有这样一个需求: textview加载一段 html标签 其中包含 "<Img url= " 图片异步展示 而且 根据图片的比例 宽度满屏展示. 思路: 重写textview Html.fromHtml方法  以及 图片Picasso展示(后面会附带Picasso 的两个转换类) 感觉网上没有合适的或者用的是Gilde加载 其实无论是Gilde还是Picasso加载豆豆都能满足我们的需求. 需求描述完毕 上张帅图: 好吧 废话不多说了 直接上实现代码 RichText: p

页面加载时让其显示笼罩层与加载等待图片

页面加载时让其显示笼罩层与加载等待图片(结局比较完美,过程很坎坷,所以一定总结整理下,备用): 用了ajax异步,是因为js内容不能即时的显示出来,因为js是单线程,要把队列中的任务执行完后才会执行刚才对js的处理 要用beforeSend,complete的时候必须要用ajax异步 beforeSend: function () {},//程序一开始便会执行该函数,使用该方法必须使用异步ajax complete: function () {},//complete在success或error

Android ListView 图片异步加载和图片内存缓存

开发Android应用经常需要处理图片的加载问题.因为图片一般都是存放在服务器端,需要联网去加载,而这又是一个比较耗时的过程,所以Android中都是通过开启一个异步线程去加载.为了增加用户体验,给用户省流量,一般把加载完的图片先缓存下来,下次加载的时候就不需要再联网去服务器端加载.图片缓存一般分为一级缓存(即内存缓存)和二级缓存(即磁盘缓存).这里只讲一级缓存. 内存缓存就是把加载完的图片先放在手机内存中,等下次加载的时候再从内存中取出来. 优点是速度快,缺点是不能长久保存,用户退出应用程序之

安卓 WebView加载本地图片时居中显示

在一个项目中使用WebView显示gif图片(自定义的View无法放大gif),当图片过小时只在左侧显示,经过研究发现无论设置android:layout_gravity="center_horizontal"还是设置android:gravity="center_horizontal" 都无法居中显示,而且还设置了android:layout_width="wrap_content",但是实际上WebView并没有自适应内容,它的宽度占了屏幕宽

有效解决Android加载大图片时内存溢出的问题

首先解析一下基本的知识: 位图模式,bitmap颜色位数是1位 灰度模式,bitmap颜色位数是8位,和256色一样 RGB模式,bitmap颜色位数是24位 在RGB模式下,一个像素对应的是红.绿.蓝三个字节 CMYK模式,bitmap颜色位数是32位  在CMYK模式下,一个像素对应的是青.品.黄.黑四个字节 图像文件的字节数(Byte) = 图像分辨率*颜色深度/8(bit/8) 例如:一幅640*480图像分辨率.RGB色一般为24位真彩色,图像未经压缩的数据容量为:640X480X24