view

如何实现Android截屏功能?

2019-09-29  本文已影响0人  好学人

1. 业务需求

之前在龙珠直播工作时,遇到过一个截屏分享需求,不过当时截屏功能的代码是上海的同事实现的,当时只是拿来调用了一下,并未作深入研究。

今天研究AOP时,意外看到一篇介绍截屏分享的文章,就随手搜索了一下,找了一种最简单易行的截屏方法,在此记录下来,以便日后使用。

2. 实现思路

我们在学习自定义控件时,知道控件的绘制是在View#draw(canvas)方法中完成的,那我们能不能利用这个方法将控件的内容绘制到一个指定的Bitmap中呢?

答案当然是可以的!

而且实现思路也超级简单:

  1. 根据控件的宽高创建一个空的Bitmap
  2. 根据该Bitmap新建一个Canvas
  3. 将控件的内容绘制到新建的Canvas上
  4. 返回第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对象,然后我们就可以为所欲为了。

上一篇下一篇

猜你喜欢

热点阅读