问题一:GridView直接加载大量本地资源图片时,发生内存不足,超过了图片栈最大内存8M。
问题二:GridView不能显示Bitmap等资源
解决方法一:避免直接加载资源,配置BitmapFactory的缩放比例,配置等参数,然后通过decodeResource加载资源,大大降低内存占有;
也可以通过openRawResource打开资源输入流,在生成Bitmap,这种方法的优势是openRawResource是原生方法,内存占用更低
public Bitmap readBitMap(Context context, int resId) {
BitmapFactory.Options opt = new BitmapFactory.Options();
opt.inPreferredConfig = Bitmap.Config.RGB_565;
opt.inSampleSize = 4;
//获取资源图片
return BitmapFactory.decodeResource(getResources(),resId,opt);
}
解决方法二:GridView的机制只能处理字符串,布尔值,Integer类型,幸运的是,GridView对外提供了ViewBinder抽象类,用于拦截默认的处理操作。
simpleAdapter.setViewBinder(new SimpleAdapter.ViewBinder() {
@Override
public boolean setViewValue(View view, Object data, String textRepresentation) {
if (view instanceof ImageView && data instanceof Bitmap) {
((ImageView) view).setImageBitmap((Bitmap) data);
return true;
}
return false;
}
});