從網絡異步加載listView中圖片

用一個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;
        }
    }



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章