Android View保存为bitmap

这篇博客详细介绍了如何将Android的View转换为Bitmap。首先获取View的宽高,如果宽高未知则通过View.measure测量。接着创建Bitmap和Canvas,以Bitmap为缓冲区,然后调用view.draw(canvas)将内容绘制到Bitmap上。最后返回生成的Bitmap。注意在wrap_content情况下可能需要手动测量View的尺寸。

如果想把Android的某个view保存为bitmap,非常简单。

基本流程是,先拿到view的宽高,然后创建一个bitmap和一个canvas,canvas使用bitmap作为buffer。然后,调用view.draw(canvas),把view的内容绘制到canvas上。

方法如下:

public static Bitmap saveViewAsBitmap(View view) {
    int width = view.getWidth();
    int height = view.getHeight();
    if (width <= 0 || height <= 0) {
        DebugLog.i(TAG, "size is unknown, maybe wrap_content, will measure");
        int specSize = View.MeasureSpec.makeMeasureSpec(0 /* any */, View.MeasureSpec.UNSPECIFIED);
        view.measure(specSize, specSize);
        width = view.getMeasuredWidth();
        height = view.getMeasuredHeight();
    }
    DebugLog.i(TAG, "view size is w " + width + " h " + height);
    if (width <= 0 || height <= 0) {
        DebugLog.e(TAG, "invalid size, do nothing, return null");
        return null;
    }

    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    if(view.getRight() <= 0 || view.getBottom() <= 0) {
        view.layout(0, 0, width, height);
        view.draw(canvas);
    } else {
        view.layout(view.getLeft(), view.getTop(), view.getRight(), view.getBottom());
        view.draw(canvas);
    }

    return bitmap;
}

需要注意的是,如果拿不到view的宽高,例如view的layout_widthwrap_content的情况下,可能拿不到,则需要调用View.measure来获得一下。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

newchenxf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值