将View转换为Bitmap的2种方式

方法1.buildDrawingCache (不推荐)

android.view.View#buildDrawingCache(boolean)

android.view.View#getDrawingCache(boolean)

这2个方法配合使用使用,可以将View转换为Bitmap

缺点

1. 效率差,从源码注释可知,这个方法的使用会影响View的渲染性能,尤其是开了硬件加速的情况下,仍然会强制软件绘制一次。
2. 虽然带缩放参数,但仍然是整体绘制,效率差,费内存
3. 当View过大时容易导致卡顿。

方法2.View.draw()推荐

利用View自身的draw方法,再结合Matrix将自己的整体或者局部绘制到以Bitmap为画板的Canvas上,代码如下

/**
 * 高效的获取View的裁剪区
 * @param view 需要处理的View
 * @param crop 裁剪区域
 * @param downscaleFactor 缩放参数
 * @return
 */
public static Bitmap getDownscaledBitmapForView(View view, Rect crop, float downscaleFactor) {

    View screenView = view;

    int width = (int) (crop.width() * downscaleFactor);
    int height = (int) (crop.height() * downscaleFactor);
    float dx = -crop.left * downscaleFactor;
    float dy = -crop.top * downscaleFactor;

    if (width * height <= 0) {
        return null;
    }
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);//准备图片
    Canvas canvas = new Canvas(bitmap);//将bitmap作为绘制画布
    Matrix matrix = new Matrix();
    matrix.preScale(downscaleFactor, downscaleFactor);
    matrix.postTranslate(dx, dy);
    canvas.setMatrix(matrix);//设置matrix
    screenView.draw(canvas);//讲View特定的区域绘制到这个canvas(bitmap)上去,
    return bitmap;//得到最新的画布
}

优势

1. 按需绘制,按需裁剪
2. 需要的内存空间更小
3. 不影响硬件加速,而且效率更高
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值