美文网首页view
如何实现Android截屏功能?

如何实现Android截屏功能?

作者: 好学人 | 来源:发表于2019-09-29 18:18 被阅读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对象,然后我们就可以为所欲为了。

    相关文章

      网友评论

        本文标题:如何实现Android截屏功能?

        本文链接:https://www.haomeiwen.com/subject/xccqpctx.html