有时候需要将某个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方法
欢迎关注我的公众号,不定期推送优质的文章,
微信扫一扫下方二维码即可关注。