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 { @Override protected 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(); } @Override protected 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>