滚动截屏,RecyclerView截屏,ScrollView截屏,ListView截屏

每日推荐

如果对自定义AS插件,并希望了解如何做一个多渠道打包这样的有用的插件,推荐:

https://www.jianshu.com/p/3e56303fb375

本文作者

作者:BoBoMEe

链接:

http://www.cnblogs.com/BoBoMEe/p/4556917.html

本文由作者授权发布。

在做分享功能的时候,需要截取全屏内容,一屏展示不完的内容,一般我们会用到 ListView ,ScrollView或Recyclerview。

1

普通截屏的实现

获取当前Window 的 DrawingCache 的方式,即decorView的DrawingCache。

获取当前View的DrawingCache

2

开源方案

在滚动视图中,如果当前View并没有在视图中全部绘制出来,我们可以利用View的ScrollTo()和ScrollBy()方法来移动画布,同时获取当前View的可视部分的DrawingCache,最后进行拼接得到其Bitmap,参考:PGSSoft/scrollscreenshot@[Github],原理图如下:

https://github.com/PGSSoft/scrollscreenshot

3

ScrollView截屏

三个截屏中,ScrollView最简单,因为ScrollView只有一个childView,虽然没有全部显示在界面上,但是已经全部渲染绘制,因此可以直接 调用`scrollView.draw(canvas)`来完成截图,

4

ListView截屏

而ListView就是会回收与重用Item,并且只会绘制在屏幕上显示的ItemView,根据stackoverflow上大神的建议,采用一个List来存储Item的视图,这种方案依然不够好,当Item足够多的时候,可能会发生oom。

5

RecyclerView截屏

我们都知道,在新的Android版本中,已经可以用RecyclerView来代替使用ListView的场景,相比较ListView,RecyclerView对Item View的缓存支持的更好。可以采用和ListView相同的方案,这里也是在stackoverflow上看到的方案。

6

其他屏幕相关工具

1.获取状态栏高度常见方式

2.获取标题栏高度

3.获取屏幕宽高

相关源码:

https://github.com/BoBoMEe/AndroidDev/blob/master/common/common/src/main/java/com/bobomee/android/common/util/ScreenUtil.java

参考:

https://github.com/PGSSoft/scrollscreenshot

刚好之前还推送过webview截屏,这下截屏相关齐活了:

如果你想要跟大家分享你的文章,欢迎投稿~

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180103B031G100?refer=cp_1026

扫码关注云+社区