方法1.buildDrawingCache (不推荐)
android.view.View#buildDrawingCache(boolean)
android.view.View#getDrawingCache(boolean)
这2个方法配合使用使用,可以将View转换为Bitmap文章来源:https://www.toymoban.com/news/detail-570488.html
缺点
1. 效率差,从源码注释可知,这个方法的使用会影响View的渲染性能,尤其是开了硬件加速的情况下,仍然会强制软件绘制一次。
2. 虽然带缩放参数,但仍然是整体绘制,效率差,费内存
3. 当View过大时容易导致卡顿。
方法2.View.draw()推荐
利用View自身的draw方法,再结合Matrix将自己的整体或者局部绘制到以Bitmap为画板的Canvas上,代码如下文章来源地址https://www.toymoban.com/news/detail-570488.html
/**
* 高效的获取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. 不影响硬件加速,而且效率更高
到了这里,关于将View转换为Bitmap的2种方式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!