2014年8月11日 星期一

以最省記憶體的方式換背景

如果你在設定背景圖片時 發現出現記憶體不足的問題(Out of Memory 異常)
可以考慮使用以下的Code
// Minimize 類別
public class Minimize {
  /**
    * 以最省記憶體的方式來存取圖片
    *
    * @param context
    * @param resId
    * @return
    */
  private static Bitmap readBitMap(Context context, int resId) {
    BitmapFactory.Options opt = new BitmapFactory.Options();
    opt.inPreferredConfig = Bitmap.Config.RGB_565;
    opt.inPurgeable = true;
    opt.inInputShareable = true;
    // 獲取圖片資源
    InputStream is = context.getResources().openRawResource(resId);
    return BitmapFactory.decodeStream(is, null, opt);
   }
 
  //將redId採取Bitmap 再轉成BitmapDrawable 就可以setBackground()了
  public static BitmapDrawable getBitmapDrawable(Context context,int redId){
    Bitmap bm = readBitMap(context, redId);
    BitmapDrawable bd = new BitmapDrawable(context.getResources(), bm);//轉換成Drawable
    return bd;
   }
  }
  //之後設定背景
  RelativeLayout background = (RelativeLayout) findViewById(R.id.map);
  background.setBackground(Minimize.getBitmapDrawable(this,
    R.drawable.map_relaxbg));

沒有留言:

張貼留言