SimpleAdapter中使用Drawable和Bitmap对象的方法

我们平常使用SimpleAdapter作为ListView或GridView适配器时,如果要显示图片,我们通常使用图片的id即R.drawable.xxx的方式来将图片绑定到视图上。

但是,如果我们要使用的图片是个Drawable或Bitmap对象时,上面的方式就不能解决问题了。下面就介绍如何在SimpleAdapter中使用Drawable或Bitmap对象。

1.使用Drawable对象作为SimpleAdapter要适配的图片资源

SimpleAdapter adapter=new SimpleAdapter(this,
items, R.layout.line,
new String[]{"imgIco","appName","packageName"},new  int[]{R.id.imgIco,R.id.tvAppName,R.id.tvAppDesc});

list.setAdapter(adapter);

//ViewBinder该类可以帮助SimpleAdapter加载图片(如:Bitmap,Drawable)

adapter.setViewBinder(new ViewBinder() {

@Override

public
boolean
setViewValue(View view, Object data,

String textRepresentation) {

// TODO Auto-generated method stub

if(view
instanceof ImageView && data
instanceof
Drawable){

ImageView iv = (ImageView)view;

iv.setImageDrawable((Drawable)data);

return
true
;

}else{

return
false
;

}

}

});

2.使用Bitmap对象作为SimpleAdapter要适配的图片资源

SimpleAdapter adapter=new SimpleAdapter(this,
items, R.layout.line,
new String[]{"imgIco","appName","packageName"},new  int[]{R.id.imgIco,R.id.tvAppName,R.id.tvAppDesc});

list.setAdapter(adapter);

//ViewBinder该类可以帮助SimpleAdapter加载图片(如:Bitmap,Drawable)

adapter.setViewBinder(new ViewBinder() {

@Override

public
boolean
setViewValue(View view, Object data,

String textRepresentation) {

// TODO Auto-generated method stub

if(view
instanceof ImageView  && data
instanceof Bitmap){

ImageView iv = (ImageView)view;

iv.setImageBitmap((Bitmap) data);

return
true
;

}else{

return
false
;                 }

}

});

上面的方法其大致其流程是:首先检查SimpleAdapter有没有指定SimpleAdapter.ViewBinder,如果指定了就调用其setViewValue方法。

SimpleAdapter.ViewBinder是一个接口,也只有这一个方法,如果ViewBinder返回true表示我们已经完成了对这个View的数据绑定,就不再调用系统默认的实现,当然我们也可以设置一个ViewBinder添加一些功能后通过返回false再让系统绑定数据,比如对按钮添加响应事件,而按钮上的文字由默认实现绑定。

时间: 2024-10-26 05:51:47

SimpleAdapter中使用Drawable和Bitmap对象的方法的相关文章

Android开发中解析、创建Bitmap对象时OOM的有效解决方法并附上一些干货

先来点鸡汤: Stay hungry,stay foolish 这句话的的解读:我们必须了解自己的渺小.如果我们不学习,科技发展的速度会让我们五年后被清空.所以,我们必须用初学者谦虚的自觉,饥饿者渴望的求知态度,来拥抱未来的知识. 这几天做的项目中需要从图库选择图片或者拍照生成图片,然后展现在IamgeView控件上.当然,从图库选择图片和拍照选择图片的功能实现起来很简单.直接写上代码: CharSequence[] items = { "拍照", "图库" };

Spring框架中2种生成代理对象的方法

Spring框架中2种生成代理对象的方法 Jdk Proxy基于接口生成代理对象,只能赋值给接口的引用(默认使用jdk). Spring进一步封装 CGLIB,基于实现类生成代理对象,既可以赋值给接口的引用,也可以赋值给实现类的引用 JDK提供的Proxy,和spring进一步封装的CGLIB.二者生成的代理没有任何区别,生成的都是代理对象.只是生产方式不同,前者是基于接口生成代理,后者基于实现类生成代理对象 如何切换spring框架中默认生成代理的方式 <aop:config proxy-ta

Android中利用C++处理Bitmap对象

相信有些Android&图像算法开发者和我一样,遇到过这样的状况:要对Bitmap对象做一些密集计算(例如逐像素的滤波),但是在java层写循环代码来逐像素操作明显是不现实的,因为Java代码的运行速度太慢,而一副很小的240*320图像就有76800个像素,如果考虑到RGB三通道(或者ARGB四通道),还要对这个数量乘以3/4.因此对图像的密集计算一般都利用Jni接口,用C++实现.那么问题来了,怎么把Bitmap中的像素数据从Java层传到C++层? 做法1:之前的做法 我之前的做法是这样的

Drawable转换为Bitmap两种方法

如果通过网络加载了一张位图,想拿到这张位图的Bitmap,有两种办法,至于那种好,可能要看是在什么情况下了 1,根据已有的Drawable创建一个新的Bitmap: private Bitmap bitmap;private void drawableToBitamp(Drawable drawable) { int w = drawable.getIntrinsicWidth(); int h = drawable.getIntrinsicHeight(); System.out.printl

实现一种快速查找Richedit中可见区域内OLE对象的方法

Richedit是一个OLE容器,使用Richedit来显示IM聊天内容时,通常使用OLE对象来实现在Richedit中播放表情动画. 触发表情的绘制有两种途径: 1.来自Richedit的刷新消息. 2.来自表情动画定时器的刷新消息. 要刷新表情的显示首先需要知道表情的显示位置. 第一种刷新过程中,绘制消息参数里已经给出绘制位置,直接在指定的位置绘制即可. 但是表情主动刷新时如何获取表情的显示位置确是一个问题. 网上有不少代码演示了如何获通过枚举Richedit中的OLE对象获取表情的代码.

Java中四种遍历Map对象的方法

方法一:在for-each循环中使用entry来遍历,通过Map.entrySet遍历key和value,这是最常见的并且在大多数情况下也是最可取的遍历方式.在键值都需要时使用. Map<Integer,Integer> map = new HashMap<Integer,Integer>(); for(Map.Entry<Integer,Integer> entry:map.entrySet()){ System.out.println("key="

Android中将Bitmap对象以PNG格式保存在内部存储中

在Android中进行图像处理的任务时,有时我们希望将处理后的结果以图像文件的格式保存在内部存储空间中,本文以此为目的,介绍将Bitmap对象的数据以PNG格式保存下来的方法. 1.添加权限 由于是对SD card进行操作,必不可少的就是为你的程序添加读写权限,需要添加的内容如下: <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>

android 获取资源文件 R.drawable中的图片转换为drawable、bitmap(转载)

转载自:android 获取资源文件 R.drawable中的图片转换为drawable.bitmap 1. Resources resources = mContext.getResources();Drawable drawable = resources.getDrawable(R.drawable.a);imageview.setBackground(drawable); 2. Resources r = this.getContext().getResources();Inputstr

android 获取资源文件 r.drawable中的图片转换为drawable、bitmap

1. Resources resources = mContext.getResources(); Drawable drawable = resources.getDrawable(R.drawable.a); imageview.setBackground(drawable); 2. Resources r = this.getContext().getResources(); Inputstream is = r.openRawResource(R.drawable.my_backgrou