从网络异步加载listView中图片

本文介绍了一种利用Map结构存储图片并实现异步加载的高效方法,通过CanvasImageTask实现图片的异步获取,并在ListView中以指定位置展示。这种方法在图片较多时能显著提升用户体验,减少页面加载时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用一个Map<Integer,Bitmap>
cavasImageTask取到图片后把图片放到map里
键是listivew的position。
在getView里面先判断map里是否有,如果有直接拿,没有的话再asyncTask.execute.


public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    if (convertView == null) {
        holder = new NewsHolder();
        convertView = inflater.inflate(R.layout.newitem, null);
        holder.img = (ImageView) convertView.findViewById(R.id.img);
        holder.title = (TextView) convertView.findViewById(R.id.title);
        holder.content = (TextView) convertView.findViewById(R.id.content);
        convertView.setTag(holder);

    } else {
        holder = (NewsHolder) convertView.getTag();
    }
    holder.img.setId(position);
    holder.img.setTag(this.imgPath[position]);
    info = newsList.get(position);
    if (info != null) {
        holder.title.setText(info.getTitle());
        holder.content.setText(info.getContent());

    }
    if (map.containsKey(position + "")) {
        holder.img.setimagebitmap(map.get(position));
    } else {
        holder.img.setimagebitmap(null);
    }
    //这里是异步调用图片
    new CanvasImageTask().execute(holder.img);
    holder.img.setDrawingCacheEnabled(true);

    return convertView;
}


public class CanvasImageTask extends AsyncTask < ImageView,
Void,
Bitmap > {
    private ImageView gView;

    protected Bitmap doInBackground(ImageView...views) {
        Bitmap bmp = null;
        ImageView view = views[0];
        // 根据iconUrl获取图片并渲染,iconUrl的url放在了view的tag中。
        if (view.getTag() != null) {
            try {
                URL url = new URL(view.getTag().toString());
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                conn.setDoInput(true);
                conn.connect();
                InputStream stream = conn.getInputStream();
                bmp = BitmapFactory.decodeStream(stream);
                stream.close();
            } catch(Exception e) {
                Log.v("img", e.getMessage());
                return null;
            }
        }
        this.gView = view;
        return bmp;
    }

    protected void onPostExecute(Bitmap bm) {
        if (bm != null) {
            //此处更新图片
            this.gView.setImageBitmap(bm);
            this.gView = null;
        }
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值