DynamicShareView
dynamic generate shareview way
Install / Use
/learn @HelloVass/DynamicShareViewREADME
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 布局确实蛮好用的...
竖屏
<p align="center"> <img src="https://hellovass-blog-1257365569.cos.ap-shanghai.myqcloud.com/dynamic_share_image593581044.jpg" width="50%" height="50%"/> </p>横屏
<p align="center"> <img src="https://hellovass-blog-1257365569.cos.ap-shanghai.myqcloud.com/dynamic_share_image659610247.jpg" width="50%" height="50%"/> </p>介绍
这个栗子是基于 FlexboxLayout 实现的不规则图片墙,你也可以仿照 DefaultRender 根据自己的实际业务需求实现自己的渲染器。
技术点
- FlexboxLayout 的动态添加子View 技巧
- rx2.X版本的基操
- iconfont 的基操
- 如何正确地手动 measure、layout View
- 自定义 Glide 的变换,通过多重变换实现高斯模糊、水印
- canvas 结合 iconfont,通过 drawText 的方式来绘制水印
- ...
PS:图片有时候看起来会很奇怪,那是因为动态生成的图片尺寸往往都会很大,所以
ImageView使用矩阵进行了缩放,导致图片看起来被压缩了。别慌,之后我写一个BigImageView就可以正常显示超大图了。
最早的版本
根据之前的写过的文章动态生成分享图片重构而来,对比一下,就会发现,居然优化了这么多?!啧啧啧
Related Skills
node-connect
341.8kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
84.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
341.8kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
84.6kCommit, push, and open a PR
