1. 业务需求
之前在龙珠直播工作时,遇到过一个截屏分享需求,不过当时截屏功能的代码是上海的同事实现的,当时只是拿来调用了一下,并未作深入研究。
今天研究AOP时,意外看到一篇介绍截屏分享的文章,就随手搜索了一下,找了一种最简单易行的截屏方法,在此记录下来,以便日后使用。
2. 实现思路
我们在学习自定义控件时,知道控件的绘制是在View#draw(canvas)
方法中完成的,那我们能不能利用这个方法将控件的内容绘制到一个指定的Bitmap中呢?
答案当然是可以的!
而且实现思路也超级简单:
- 根据控件的宽高创建一个空的Bitmap
- 根据该Bitmap新建一个Canvas
- 将控件的内容绘制到新建的Canvas上
- 返回第1步创建的Bitmap(此时已经有画面了)
3. 实现代码
public Bitmap captureView(View view) {
// 根据View的宽高创建一个空的Bitmap
Bitmap bitmap = Bitmap.createBitmap(
view.getWidth(),
view.getHeight(),
Bitmap.Config.RGB_565);
// 利用该Bitmap创建一个空的Canvas
Canvas canvas = new Canvas(bitmap);
// 绘制背景(可选)
canvas.drawColor(Color.WHITE);
// 将view的内容绘制到我们指定的Canvas上
view.draw(canvas);
return bitmap;
}
有了可以将控件生成图片的方法,想截取哪个控件的图片,就将哪个控件传入即可。如果想截取整个Activity的图片,只需要将Activity的根布局传入即可。
获取Activity根布局:activity.getWindow().getDectorView()
4. 总结
Android控件显示内容时,无论是文本控件还是图片控件,其本质都是将内容绘制到Bitmap上去显示的。
因此我们可以调用View的绘制方法将控件中的内容绘制到我们指定的Bitmap上,有了Bitmap对象,然后我们就可以为所欲为了。
网友评论