基于 rxjava 实现的动态渲染分享图
- 工作线程渲染图片
- 将生成的分享图保存到本地,方便之后第三方分享sdk使用
- 无回调地狱,只需要实现一个 RenderDelegate 即可
- RxJava&RxAndroid(2.x版本),懒得介绍系列
- Glide(4.x版本),懒得介绍系列
- FlexboxLayout,在 sample 用来实现不规则图片墙的效果
- ZXing(3.x版本),懒得介绍系列,将生成二维码的部分封装成了 QRCodeEncoder(放心,边距问题不存在的)
- transformations,懒得介绍系列,用来实现各种变换
- 阿里的 iconfont,让我这种懒人终于不用去下载图片了,还不是美滋滋
超级无敌可爱你妈棒棒糖ok的雾聚dalao的微博相册日常作为超强有力的数据来源支撑!
// 传入自己的渲染器即可,这里的 FlexRenderDelegate 是基于 FlexboxLayout 实现的渲染器
ShareViewImpl(this, FlexRenderDelegate(this))
.getLocalPath()
.observeOn(AndroidSchedulers.mainThread())
.subscribe { localImagePath ->
// TODO: 这里可以调用第三方分享SDK将本地生成好的图片文件分享出去
}
稍稍展示一下默认渲染器渲染的效果,flex 布局确实蛮好用的...
这个栗子是基于 FlexboxLayout 实现的不规则图片墙,你也可以仿照 DefaultRender 根据自己的实际业务需求实现自己的渲染器。
- FlexboxLayout 的动态添加子View 技巧
- rx2.X版本的基操
- iconfont 的基操
- 如何正确地手动 measure、layout View
- 自定义 Glide 的变换,通过多重变换实现高斯模糊、水印
- canvas 结合 iconfont,通过 drawText 的方式来绘制水印
- ...
PS:图片有时候看起来会很奇怪,那是因为动态生成的图片尺寸往往都会很大,所以
ImageView
使用矩阵进行了缩放,导致图片看起来被压缩了。别慌,之后我写一个BigImageView
就可以正常显示超大图了。
根据之前的写过的文章动态生成分享图片重构而来,对比一下,就会发现,居然优化了这么多?!啧啧啧