看到了这篇文章的标题,你也大概知道了这篇文章主要讲什么:利用原生的<animation-list>标签配置帧动画时,如果图片过大,或者图片过多,就会OOM。所以,为了避免这样情况,有以下两种方式:
1. 让UI把帧动画设计成gif动画,然后使用某个gif开源框架加载,如:https://github.com/koral--/android-gif-drawable
2. 自定义控件实现帧动画
本文主要讲的是第二种方式,自定义控件实现帧动画,废话少说,直接上代码。
等等,还是先讲一下思路吧。
1. 怎么才能不OOM呢?
答:只要一次加载一张图片不就可以了,在加载第二章图片的时候,把第一张图片recycle掉。
2. 难道要直接继承view吗?
答:直接继承View也可以,但本人没那么强大的能力。本人选择的是SurfaceView。
3. 为啥选择SurfaceView?
答:
a:SurfaceView是View的继承类,这个视图里内嵌了一个专门用于绘制的Surface。你可以控制这个Surface的格式和尺寸。Surfaceview控制这个Surface的绘制位置。
b:Surfaceview提供了两个线程:UI线程和渲染线程,他的特性是:可以在主线程之外的线程中向屏幕绘图上,这样可以避免画图任务繁重的时候造成主线程阻塞。
4. 如何像<animation-list>那样,配置图片位置,图片显示时间呢?