android 查看圖片縮略圖
在android中,圖片使用上,往往會(huì)出現(xiàn)OOM(out of memory)的情況,在這里,我將總結(jié)一些辦法,來(lái)避免OOM的問(wèn)題。
先看一張圖:
這張圖里,使用的gridView來(lái)顯示圖片,如果圖片數(shù)目很多,上下滾動(dòng)的時(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)說(shuō)明:
Options這個(gè)類,有兩個(gè)重要的屬性。分別是inJustDecodeBounds 和inSampleSize。
inJustDecodeBounds 表示是否只是解碼邊界信息,也就是,這段代碼
BitmapFactory.decodeFile(imagePath,?options);
之后,options里會(huì)存儲(chǔ)該圖片的高度和寬度信息,而此時(shí)返回的bitmap是為null的。
得到了圖片的高度和寬度之后,我們?cè)倏聪乱粋€(gè)屬性inSampleSize,這個(gè)屬性可以理解為縮放比例,是int類型,縮放比例為2的指數(shù)倍
比如說(shuō)inSampleSize=1時(shí),則表示不縮放,inSampleSize=2時(shí),表示長(zhǎng)和寬都分別縮小到原來(lái)的1/2*2,即四分之一,同理為3時(shí)則為九分之一。
最后縮放出來(lái)的大小,并不是能和要求的大小一模一樣,但是不會(huì)小于指定的長(zhǎng)和寬,可以在LayoutParams里指定長(zhǎng)和寬,即達(dá)到了圖上的效果。





