Android开发Android开发经验谈Android开发

一行代码让TextView中ImageSpan支持Gif(一)-

2018-02-06  本文已影响349人  sunhapper

前言

利用ImageSpan实现TextView的图文混排的教程数不胜数,但是当的ImageSpan中的drawable是一张动图的时候,却往往发现这张图并没有像预期一样动起来。
我在做聊天功能的时候也碰到了这个问题,网上搜索半天,大体的思路倒是有了,不过并没有发现一个较为全面和完整的总结及代码实现。
于是自己写了一个使用极其简单的方法并分析总结一下实现的思路以及实现过程中碰到的坑,好让要做同样功能的同学少走弯路。

ScreenShot

emojiSp.gif

解决方案

先上解决方案,有兴趣的可以继续往下看我的分析

项目地址 https://github.com/sunhapper/SpEditTool
用法说明 SpEditTool使用指南
欢迎star,提PR、issue

GifTextUtil.setText方法会将TextView和包含动图的Spannable字符串绑定并在动图刷新时刷新TextView以实现gif的图文混排

重要说明

原理分析

动图不刷新的原因

动图只是一个drawable,并不知道是哪个View持有了它,所以drawable只能刷新它自己,而外部的View没有刷新的话显示在屏幕上的还是drawable刷新之前的样子。

解决方法

一个不完善的思路

最初的思路来源于android平台TextView使用ImageSpan展示GIF图片 ,虽然最终实现的时候发现这篇文章的代码大部分是纸上谈兵,不能真正完成功能,不过思路还是给了我很大的启示,对作者表示感谢

简单总结下这篇文章的思路

错误分析

改进

总结

让TextView中的gif动起来,一句话总结就是先设置drawable的Drawable.Callback,然后在invalidateDrawable回调中刷新TextView,使用GifTextUtil.setText一行代码就可以实现这一功能了
具体如何实现请看一行代码让TextView中ImageSpan支持Gif(二)

索引

一行代码让TextView中ImageSpan支持Gif(一)
第一篇给出解决方案并分析整体思路

一行代码让TextView中ImageSpan支持Gif(二)
第二篇对实现中的细节和踩过的坑进行说明

一行代码让TextView中ImageSpan支持Gif(三)
第三篇介绍如何使用android-gif-drawable和Glide实现远程gif图片在TextView中的图文混排

一行代码让TextView中ImageSpan支持Gif(四)
第四篇介绍在RecyclerView等需要drawable复用的场景下的gif动图显示

上一篇下一篇

猜你喜欢

热点阅读