package com.horn.utils; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.view.View; import android.widget.ImageView; /** * VIew转图片工具类 */ public class MyDrawableHelper { private static final String TAG = MyDrawableHelper.class.getSimpleName(); private static final Canvas sCanvas = new Canvas(); public static Bitmap createBitmapFromView(View view, float scale) { if (view instanceof ImageView) { Drawable drawable = ((ImageView) view).getDrawable(); if (drawable != null && drawable instanceof BitmapDrawable) { return ((BitmapDrawable) drawable).getBitmap(); } } view.clearFocus(); Bitmap bitmap = createBitmapSafely((int) (view.getWidth() * scale), (int) (view.getHeight() * scale), Bitmap.Config.ARGB_8888, 1); if (bitmap != null) { synchronized (sCanvas) { Canvas canvas = sCanvas; canvas.setBitmap(bitmap); canvas.save(); canvas.drawColor(Color.WHITE); // 防止 View 上面有些区域空白导致最终 Bitmap 上有些区域变黑 canvas.scale(scale, scale); view.draw(canvas); canvas.restore(); canvas.setBitmap(null); } } return bitmap; } public static Bitmap createBitmapFromView(View view) { return createBitmapFromView(view, 1f); } public static Bitmap createBitmapSafely(int width, int height, Bitmap.Config config, int retryCount) { try { return Bitmap.createBitmap(width, height, config); } catch (OutOfMemoryError e) { e.printStackTrace(); if (retryCount > 0) { System.gc(); return createBitmapSafely(width, height, config, retryCount - 1); } return null; } } }
布局保存成为图片-MyDrawableHelper.java
最新推荐文章于 2024-05-26 09:59:01 发布