Android显示GIF动画完整示例(二)

MainActivity如下:

package cc.testgif2;import android.os.Bundle;import android.app.Activity;/** * Demo描述: * 利用自定义View控件显示GIF动画 * 详细代码参见GIFView *  * 参考资料: * http://blog.csdn.net/dawanganban/article/details/9816083 * Thank you very much */public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);}}

GIFView如下:

package cc.testgif2;import android.content.Context;import android.graphics.Canvas;import android.graphics.Movie;import android.util.AttributeSet;import android.view.View;public class GIFView extends View {    private Movie mMovie;    private long startTime;    private  int gifDuration;    private boolean isBeginPlay=true;public GIFView(Context context, AttributeSet attrs, int defStyle) {super(context, attrs, defStyle);init();}public GIFView(Context context, AttributeSet attrs) {super(context, attrs);init();}public GIFView(Context context) {super(context);init();}private void init(){mMovie = Movie.decodeStream(getResources().openRawResource(R.drawable.gif));gifDuration= mMovie.duration();}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);// 从开机到现在的毫秒(不包括手机睡眠的时间在内)long currrentTime = android.os.SystemClock.uptimeMillis();// 第一次播放if (isBeginPlay) {startTime = currrentTime;isBeginPlay = false;}int playTime = (int) ((currrentTime - startTime) % gifDuration);mMovie.setTime(playTime);mMovie.draw(canvas, 0, 0);// 重绘invalidate();}}


main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"  >    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/hello_world"         android:layout_centerHorizontal="true"/>        <cc.testgif2.GIFView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_centerInParent="true"    /></RelativeLayout>