如何在ListView中显示Bitmap图像

来源:互联网 发布:济南seo燕少 编辑:程序博客网 时间:2024/05/16 11:25

我在一个小项目中需要用到将SD卡中的图片读出后,压缩,再进行显示。在编程过程中,使用SimpleAdapter适配器时,图片资源的ID均需是程序内的本地资源。在网上找到了两个实现方法,第一个我验证了可以实现,第二个比较繁琐还未验证。

1.实现ViewBinder()接口

一般来说,在用simpleAdapter适配器时,我们所要显示的图片资源都是程序内的本地资源,而且是以资源的ID(Resources ID)形式来表现的。但是有时候我们需要用这个适配器来显示网上的远程图片时,该如何直接显示呢?方法是实现ViewBinder()这个接口,在里面定义数据和视图的匹配关系。实例代码如下:

    SimpleAdapter simpleAdapter = new SimpleAdapter(this, setData(),                      R.layout.list, new String[] {"Name", "Image" }, new int[] {                      R.id.list_Name, R.id.list_Image });              simpleAdapter.setViewBinder(new ListViewBinder());            private class ListViewBinder implements ViewBinder {                    @Override              public boolean setViewValue(View view, Object data,                      String textRepresentation) {                  // TODO Auto-generated method stub                  if((view instanceof ImageView) && (data instanceof Bitmap)) {                      ImageView imageView = (ImageView) view;                      Bitmap bmp = (Bitmap) data;                      imageView.setImageBitmap(bmp);                      return true;                  }                  return false;              }                        }   

2.重写SimpleAdapter(http://www.pocketdigi.com/20110303/196.html)

myAdapter listItemAdapter;
listItemAdapter =new myAdapter(this,listItem,R.layout.favlv,newString[]{"ItemImage","ItemTv"},newint[]{R.id.ItemImage,R.id.ItemTv});  
下面是myAdapter的实现方法:

    package com.BottomMenu;            import java.util.List;      import java.util.Map;            import android.content.Context;      import android.graphics.Bitmap;      import android.view.LayoutInflater;      import android.view.View;      import android.view.ViewGroup;      import android.widget.Checkable;      import android.widget.ImageView;      import android.widget.SimpleAdapter;      import android.widget.TextView;            public class myAdapter extends SimpleAdapter {             private int[] mTo;       private String[] mFrom;       private ViewBinder mViewBinder;             private List<? extends Map<String, ?>> mData;             private int mResource;       private int mDropDownResource;       private LayoutInflater mInflater;             public myAdapter(Context context, List<? extends Map<String, ?>> data,         int resource, String[] from, int[] to) {        super(context, data, resource, from, to);        mData = data;        mResource = mDropDownResource = resource;        mFrom = from;        mTo = to;        mInflater = (LayoutInflater) context          .getSystemService(Context.LAYOUT_INFLATER_SERVICE);       }             /**       * @see android.widget.Adapter#getView(int, View, ViewGroup)       */       public View getView(int position, View convertView, ViewGroup parent) {        return createViewFromResource(position, convertView, parent, mResource);       }             private View createViewFromResource(int position, View convertView,         ViewGroup parent, int resource) {        View v;        if (convertView == null) {         v = mInflater.inflate(resource, parent, false);               final int[] to = mTo;         final int count = to.length;         final View[] holder = new View[count];               for (int i = 0; i < count; i++) {          holder[i] = v.findViewById(to[i]);         }               v.setTag(holder);        } else {         v = convertView;        }              bindView(position, v);              return v;       }             private void bindView(int position, View view) {        final Map dataSet = mData.get(position);        if (dataSet == null) {         return;        }              final ViewBinder binder = mViewBinder;        final View[] holder = (View[]) view.getTag();        final String[] from = mFrom;        final int[] to = mTo;        final int count = to.length;              for (int i = 0; i < count; i++) {         final View v = holder[i];         if (v != null) {          final Object data = dataSet.get(from[i]);          // if(data i)          String text = data == null ? "" : data.toString();          if (text == null) {           text = "";          }                boolean bound = false;          if (binder != null) {           bound = binder.setViewValue(v, data, text);          }                if (!bound) {           if (v instanceof Checkable) {            if (data instanceof Boolean) {             ((Checkable) v).setChecked((Boolean) data);            } else {             throw new IllegalStateException(v.getClass()               .getName()               + " should be bound to a Boolean, not a "               + data.getClass());            }           } else if (v instanceof TextView) {            // Note: keep the instanceof TextView check at the            // bottom of these            // ifs since a lot of views are TextViews (e.g.            // CheckBoxes).            setViewText((TextView) v, text);           } else if (v instanceof ImageView) {                  if (data instanceof Integer) {             setViewImage((ImageView) v, (Integer) data);            } else if (data instanceof Bitmap) {             setViewImage((ImageView) v, (Bitmap) data);            }           } else {            throw new IllegalStateException(              v.getClass().getName()                + " is not a "                + " view that can be bounds by this SimpleAdapter");           }          }         }        }       }             public void setViewImage(ImageView v, int value) {        v.setImageResource(value);       }             public void setViewImage(ImageView v, Bitmap bm) {        ((ImageView) v).setImageBitmap(bm);       }            };  


原创粉丝点击