Android自定义View播放Gif动画的示例-创新互联

前言

为株洲等地区用户提供了全套网页设计制作服务,及株洲网站建设行业解决方案。主营业务为做网站、成都网站建设、株洲网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

GIF是一种很常见的动态图片格式,在Android中它的使用场景非常多,大到启动页动画、小到一个Loading展示,都可以用GIF动画来完成,使用也很方便,直接从美工那边拿过来用就成。如果项目赶时间或者自定义原生动画太麻烦,GIF都是一个很好的选择,相比于最新的WEBP格式的动画,也有更好的兼容性(毕竟已经出现很多年了)。

关于图片加载我一直用的是Google推荐的 Glide ,图片加载和缓存都做的很好,同样也支持GIF动画。不过Glide默认就是循环播放Gif,没有开放相关的接口来控制Gif。这就使的我们不能很好地控制Gif的播放,比如控制播放开始时间、播放次数,播放暂停、播放开始、结束事件的监听,虽然用Glide可能做到(网上说可以,但我没找到方法),但操作也会很麻烦。

分析

除了第三方的库,Android自带的类 android.graphics.Movie 也可以用来加载播放Gif动画,而且实现起来很简单。

  • Movie decodeStream(InputStream is)
  • Movie decodeFile(String pathName)
  • Movie decodeByteArray(byte[] data, int offset,int length)

按来源分别可以从Gif文件的输入流,文件路径,字节数组中得到Movie的实列。然后我们可以通过操作Movie对象来操作Gif文件。

下面介绍下几个方法:

int width() movie的宽,值等于gif图片的宽,单位:px。

int height() movie的高,值等于gif图片的高,单位:px。

int duration() movie播放一次的时长,也就是gif播放一次的时长,单位:毫秒。

boolean isOpaque() Gif图片是否带透明

boolean setTime(int relativeMilliseconds) 设置movie当前处在什么时间,然后找到对应时间的图片帧,范围0 ~ duration。返回是否成功找到那一帧。

draw(Canvas canvas, float , float y) 
draw(Canvas canvas, float x, float y, Paint paint) 

分享标题:Android自定义View播放Gif动画的示例-创新互联
本文链接:http://azwzsj.com/article/ppsco.html