ViewPager读取本地图片
来源:互联网 发布:知乎怎么开通值乎 编辑:程序博客网 时间:2024/04/29 20:50
在网上看到了许多关于ViewPager的例子,但是大多数都是讲图片放到项目里面,而没有读取本地SD卡图片的例子,而我在最近做相册应用时候,正好用到
这个,再用ViewPager显示大图片的时候,总是遇到OOM异常,网上也没有什么解决方案,不过还好通过和别人交流找到了解决方案,给大家分享一下。
最开始我的代码ViewPager在加载1M以上的图片的时候,最多3张一定OOM,看一下代码
MyPagerAdapter
public class MyPagerAdapter extends PagerAdapter {Context mContext=null;ArrayList<String> image_url=null;Bitmap bitmap;ImageView imageView;private LayoutInflater inflater; public MyPagerAdapter(Context context,ArrayList<String> image_url) {this.mContext=context;this.image_url=image_url;inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn image_url.size();}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {// TODO Auto-generated method stubreturn arg0==arg1;} @Overridepublic void destroyItem(View container, int arg1, Object arg2) {((ViewPager)container).removeView((View)arg2); Log.d("ViewPager", "-<<销毁"+arg1+"页");}@Overridepublic void finishUpdate(View arg0) {// TODO Auto-generated method stub}@Overridepublic Object instantiateItem(View arg0, int arg1) { // ImageView mGifView = new ImageView(mContext);// try {// bitmap=BitmapFac.decodeFile(image_url.get(position));// mGifView.setImageBitmap(bitmap);//} catch (OutOfMemoryError e) {//e.printStackTrace();//}// ((ViewPager) container).addView(mGifView,0);// Log.i("Adapter", "instantiateItem:" + position);// return mGifView;
注意看我给注释掉了这部分代码
}@Overridepublic void restoreState(Parcelable arg0, ClassLoader arg1) {// TODO Auto-generated method stub}@Overridepublic Parcelable saveState() {// TODO Auto-generated method stubreturn null;}@Overridepublic void startUpdate(View arg0) {// TODO Auto-generated method stub} }
image_url是我保存图片文件路径的方法,就是这BitmapFactory.decodeFile方法,这个方法是在底层以流的方式绘制出来的,内存消耗非常大。我们就要改变这个方法
不适用它
ImageView mGifView = new ImageView(mContext); try { bitmap=ImageHelper.GetBitmap(image_url.get(position)); mGifView.setImageBitmap(bitmap);} catch (OutOfMemoryError e) {e.printStackTrace();} ((ViewPager) container).addView(mGifView,0); Log.i("Adapter", "instantiateItem:" + position); return mGifView;
下面给出GetBitmap的代码
public static Bitmap GetBitmap(String filePath) { FileInputStream fs = null; try { BitmapFactory.Options opt = new BitmapFactory.Options(); // opt.inPreferredConfig = Bitmap.Config.RGB_565; opt.inPurgeable = true; opt.inInputShareable = true; fs = new FileInputStream(filePath); return BitmapFactory.decodeFileDescriptor(fs.getFD(), null, opt); } catch (Exception e) { e.printStackTrace(); } finally { try { fs.close(); } catch (Exception e) { e.printStackTrace(); } } return null; }
通过上面可以看出采用decodeFileDescriptor方法,这个方法通底层生成Bitmap,节省了很多内存。轻松解决了OOM问题,比较建议使用
- ViewPager读取本地图片
- 使用Viewpager制作图片阅读器(3)-读取本地图片
- ViewPager动态加载本地图片
- 读取本地图片
- html5读取本地图片
- C# 读取本地图片
- UE4 读取本地图片
- UE4 读取本地图片
- 前端本地读取图片
- viewpager实现图片轮番(本地图片)
- android ViewPager 简单多线程加载本地图片
- viewPager本地图片自动轮播
- 读取本地存储的图片
- android 读取本地超大图片
- Unity读取本地图片资源
- android读取手机本地图片
- JS img读取本地图片
- unity 读取本地图片--模板
- git 修改最后一次提交的用户名
- ZZ:windbg 常用命令
- window7下安装Linux双系统(Ubuntu 13.10中文桌面版)
- jQuery的选择器中的通配符[id^='code']
- android 通知栏提示下载文件
- ViewPager读取本地图片
- background缩写顺序
- 1107
- 软件开发概要
- eclipse中的the resource is not on the build path of a java project相关问题
- sql日期函数大全
- mysql source命令
- comm.jar配置
- js框架开发剖析--AJAX