BitmapFactory.decodeStream引起了OutOfMemory. 在decodeStream之前,通过设置options.inJustDecodeBounds = true;让Bitmap实现虚加载。

设置options.inJustDecodeBounds = true;让Bitmap实现虚加载。 使用options.outWidth和options.outHeight获取图片宽和高。 再使用ImageLoader.getInstance().displayImage加载图片。

publicclassPhotoViewFragmentextendsFragment{privatePhotoViewmGestureImageView;privateBitmapmBitmap;@OverridepublicViewonCreateView(LayoutInflaterinflater,finalViewGroupcontainer,BundlesavedInstanceState){ViewinflateView=inflater.inflate(R.layout.fragment_photo_view_show,container,false);mGestureImageView=(PhotoView)inflateView.findViewById(R.id.p_w_picpath_turn_show_gestureImageView);getBundleData();try{/*减少内存占用*/BitmapFactory.Optionsopt=newBitmapFactory.Options();opt.inPreferredConfig=Bitmap.Config.RGB_565;opt.inPurgeable=true;opt.inInputShareable=true;opt.inJustDecodeBounds=true;//虚加载FileInputStreamfis=newFileInputStream(Environment.getExternalStorageDirectory()+File.separator+"abc.png");mBitmap=BitmapFactory.decodeStream(fis,null,opt);intwidth=opt.outWidth;intheight=opt.outHeight;if(height/width>=1.6){//判断横竖图mGestureImageView.setScaleType(ImageView.ScaleType.CENTER_CROP);}else{mGestureImageView.setScaleType(ImageView.ScaleType.FIT_CENTER);}DisplayImageOptionsop=newDisplayImageOptions.Builder().cacheInMemory(true)//default.build();Uriuri=Uri.fromFile(newFile(Environment.getExternalStorageDirectory()+File.separator+"abc.png"));ImageLoader.getInstance().displayImage(uri.toString(),mGestureImageView,op);}catch(Exceptione){Log.e("Fragment","onCreateViewp_w_picpath-view",e);}returninflateView;}/***重置GestureImageView为原大小*/publicvoidresetGestureImageView(){mGestureImageView.reset();}/***获得Bundle*/privatevoidgetBundleData(){Bundlebundle=getArguments();}@OverridepublicvoidonPause(){super.onPause();mGestureImageView.reset();}@OverridepublicvoidonDestroy(){super.onDestroy();if(mBitmap!=null&&!mBitmap.isRecycled()){mBitmap.recycle();mBitmap=null;}}}