Drawable装Bitmap,防止OOM

我们通常在设置背景图片时直接用静态方法设置,但是当你设置的图片很大,而且经常性的切换时,这是反反复复的new ImageView就极易出现OOM,可用MAT对内存泄露的地方进行查看,这时我们就需要将Drawable图片转换成Bitmap格式,再动态进行设置:

Resources r = getBaseContext().getResources();
Drawable d = r.getDrawable(R.drawable.XX);
新建一个Drawable转为Bitmap格式的工具类:

public class DrawableToBitmap {
    public static Bitmap drawableToBitmap(Drawable drawable) {
        // 取 drawable 的长宽
        int w = drawable.getIntrinsicWidth();
        int h = drawable.getIntrinsicHeight();

        // 取 drawable 的颜色格式
        Bitmap.Config config = drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
                : Bitmap.Config.RGB_565;
        // 建立对应 bitmap
        Bitmap bitmap = Bitmap.createBitmap(w, h, config);
        // 建立对应 bitmap 的画布
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, w, h);
        // 把 drawable 内容画到画布中
        drawable.draw(canvas);
        return bitmap;
    }
}



你可能感兴趣的:(Drawable装Bitmap,防止OOM)