目前Android原生部分并不完全支持动态GIF的播放,“并不完全”的意思是:google在jni、native层实现了gif的解码和每帧绘制,但如要在AP中动态绘制每帧图片,需要AP通过自己定义view的方式去完成gif动态播放。
1.GifView实现简易原理
(1) 定义GifView类,继承View类;
(2)在GifView构造器中使用android.graphics.Movie类的静态方法decodeStream(InputStream is)解码gif文件;
(3)重写onDraw()方法,具体flow如下:
2.需要注意的地方
由于API 11 之后不能使用硬件渲染movie类,因此需要在代码中声明:
/**
* Starting from HONEYCOMB have to turn off HW acceleration to draw
* Movie on Canvas.
*/
if
(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
setLayerType(View.LAYER_TYPE_SOFTWARE,
null
);
}
或者在manifest.xml中声明:
android:hardwareAccelerated="false"
3.GifView demo project
请使用Android Studio打开:testAnimatedGif.rar 。
参考
1.http://gundumw100.iteye.com/blog/1182109
2.http://blog.sina.com.cn/s/blog_7033e38201010qc1.html
3.http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0921/1701.html