Android将布局内容生成图片

本文介绍两种将Android视图转换为图片的方法:使用View的getDrawingCache方法和自定义getDrawingCache方法。核心代码展示了如何创建Bitmap并绘制视图内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

方法1:

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

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

方法2:

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

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

在这里插入图片描述

核心代码:

  @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方法

欢迎关注我的公众号,不定期推送优质的文章,
微信扫一扫下方二维码即可关注。
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值