每日推荐
如果对自定义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截屏,这下截屏相关齐活了:
如果你想要跟大家分享你的文章,欢迎投稿~
领取专属 10元无门槛券
私享最新 技术干货