android 查看圖片縮略圖
在android中,圖片使用上,往往會出現(xiàn)OOM(out of memory)的情況,在這里,我將總結(jié)一些辦法,來避免OOM的問題。
先看一張圖:
這張圖里,使用的gridView來顯示圖片,如果圖片數(shù)目很多,上下滾動的時(shí)候,很容易出現(xiàn)OOM的情況。
這里,每張圖片的實(shí)際像素是320*480.這里縮放后,每張圖片的大小是100*100.、
縮放代碼如下:
Options?options?=?new?BitmapFactory.Options(); ????????????????????options.inJustDecodeBounds?=?true; ????????????????????BitmapFactory.decodeFile(imagePath,?options); ????????????????????int?scale?=?1; ????????????????????while?(true)?{ ????????????????????????if?(options.outWidth?/?2?>=?width?&&?options.outHeight?/?2?>=?height)?{ ????????????????????????????options.outWidth?/=?2; ????????????????????????????options.outHeight?/=?2; ????????????????????????????scale++; ????????????????????????}?else?{ ????????????????????????????break; ????????????????????????} ????????????????????} ????????????????????Log.i(TAG,?"inSampleSize="?+?scale); ????????????????????options.inSampleSize?=?scale; ????????????????????options.inJustDecodeBounds?=?false; ???????????????????return?BitmapFactory.decodeFile(imagePath,?options);
做點(diǎn)說明:
Options這個(gè)類,有兩個(gè)重要的屬性。分別是inJustDecodeBounds 和inSampleSize。
inJustDecodeBounds 表示是否只是解碼邊界信息,也就是,這段代碼
BitmapFactory.decodeFile(imagePath,?options);
之后,options里會存儲該圖片的高度和寬度信息,而此時(shí)返回的bitmap是為null的。
得到了圖片的高度和寬度之后,我們再看下一個(gè)屬性inSampleSize,這個(gè)屬性可以理解為縮放比例,是int類型,縮放比例為2的指數(shù)倍
比如說inSampleSize=1時(shí),則表示不縮放,inSampleSize=2時(shí),表示長和寬都分別縮小到原來的1/2*2,即四分之一,同理為3時(shí)則為九分之一。
最后縮放出來的大小,并不是能和要求的大小一模一樣,但是不會小于指定的長和寬,可以在LayoutParams里指定長和寬,即達(dá)到了圖上的效果。