Skip to content

Latest commit

 

History

History
72 lines (48 loc) · 3 KB

README.md

File metadata and controls

72 lines (48 loc) · 3 KB

DynamicShareView

基于 rxjava 实现的动态渲染分享图

Feature

  • 工作线程渲染图片
  • 将生成的分享图保存到本地,方便之后第三方分享sdk使用
  • 无回调地狱,只需要实现一个 RenderDelegate 即可

开源库

  • RxJava&RxAndroid(2.x版本),懒得介绍系列
  • Glide(4.x版本),懒得介绍系列
  • FlexboxLayout,在 sample 用来实现不规则图片墙的效果
  • ZXing(3.x版本),懒得介绍系列,将生成二维码的部分封装成了 QRCodeEncoder(放心,边距问题不存在的)
  • transformations,懒得介绍系列,用来实现各种变换
  • 阿里的 iconfont,让我这种懒人终于不用去下载图片了,还不是美滋滋

Thanks

超级无敌可爱你妈棒棒糖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 就可以正常显示超大图了。

最早的版本

根据之前的写过的文章动态生成分享图片重构而来,对比一下,就会发现,居然优化了这么多?!啧啧啧