Android将布局内容生成图片

有时候需要将某个view的内容以图片的方式保存下来,方法如下:

方法1:

使用View的getDrawingCache方法,返回一个Bitmap对象。

需要注意:有时候调用View的getDrawingCache()返回的bitmap为null

方法2:

自定义view的getDrawingCache方法,可以参考buildDrawingCacheImpl方法去实现

下面效果图是使用方法2实现的

Android将布局内容生成图片_第1张图片

核心代码:

  @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN_MR1)
    public Bitmap getBitmap(View view) {

        if (null == view) {
            return null;
        }

        Bitmap bitmap = null;

        // 步骤一:获取视图的宽和高
        int width = view.getRight() - view.getLeft();
        int height = view.getBottom() - view.getTop();

        // 判断背景是否为不透明
        final boolean opaque = view.getDrawingCacheBackgroundColor() != 0 || view.isOpaque();
        Bitmap.Config quality;

        if (!opaque) {
            switch (view.getDrawingCacheQuality()) {
                case DRAWING_CACHE_QUALITY_AUTO:
                case DRAWING_CACHE_QUALITY_LOW:
                case DRAWING_CACHE_QUALITY_HIGH:
                default:
                    quality = Bitmap.Config.ARGB_8888;
                    break;
            }
        } else {
            quality = Bitmap.Config.RGB_565;
        }

        // 步骤二:生成bitmap
        bitmap = Bitmap.createBitmap(getResources().getDisplayMetrics(), width, height, quality);
        bitmap.setDensity(getResources().getDisplayMetrics().densityDpi);

        if (opaque){
            bitmap.setHasAlpha(false);
        }

        boolean clear = view.getDrawingCacheBackgroundColor() != 0;

        // 步骤三:绘制canvas
        Canvas canvas = new Canvas(bitmap);
        if (clear) {
            bitmap.eraseColor(view.getDrawingCacheBackgroundColor());
        }

        view.computeScroll();
        final int restoreCount = canvas.save();
        canvas.translate(-view.getScrollX(), -view.getScrollY());
        view.draw(canvas);
        canvas.restoreToCount(restoreCount);
        canvas.setBitmap(null);

        return bitmap;
    }

点击下载源码

参考文章

AndroidDrawingCache到底干了什么?
解析View的getDrawingCache方法

你可能感兴趣的:(#,Android知识点)