您的位置:首页 > 移动开发 > Android开发

Android中显示gif动态图片

2014-05-16 15:19 302 查看
在android中显示一个静态图片比如png jpg等等都很方便,但是如果要显示一个gif 动态图片就需要进行一些处理。
本文是采用自定义view 然后进行重新onDraw方法来实现
首先自定义View【MyGifView.java】
/**
 * MyGifView.java
 * Copyright(C) 2014
 * creator:cuiran 2014-5-16 下午2:01:56
 */
package com.cayden.videodemo.view;

import com.cayden.videodemo.R;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Movie;
import android.util.AttributeSet;
import android.view.View;

/**
 * 自定义View 播放gif动画 
 * @author cuiran
 * @version 1.0.0
 */
public class MyGifView extends View {

	private long movieStart;
	
	private Movie movie=Movie.decodeStream(getResources().openRawResource(R.drawable.football));

	private MyGifView(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
		// TODO Auto-generated constructor stub
	}

	private MyGifView(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}
	
	public MyGifView(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
			
	}

	

	/* (non-Javadoc)
	 * @see android.view.View#onDraw(android.graphics.Canvas)
	 */
	@Override
	protected void onDraw(Canvas canvas) {
		// TODO Auto-generated method stub
			long curTime=android.os.SystemClock.uptimeMillis();
		//第一次播放
		if (movieStart == 0) {
		movieStart = curTime;
		}
		if (movie != null) {
			int duraction = movie.duration();
			int relTime = (int) ((curTime-movieStart)%duraction);
			movie.setTime(relTime);
			movie.draw(canvas, 0, 0);
			//强制重绘
			invalidate();
		}
		super.onDraw(canvas);
		
		
	}

	
}

然后写Activity
/**
 * GifMainActivity.java
 * Copyright(C) 2014
 * creator:cuiran 2014-5-16 下午2:10:29
 */
package com.cayden.videodemo;

import com.cayden.videodemo.view.MyGifView;

import android.app.Activity;
import android.os.Bundle;

/**
 * TODO 
 * @author cuiran
 * @version 1.0.0
 */
public class GifMainActivity extends Activity {

	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		//第一种 直接使用代码
		MyGifView gifView=new MyGifView(getApplicationContext());
		setContentView(gifView);
		
		//第二种采用xml 貌似出错了?????
//		setContentView(R.layout.gif_main);
	}
}
本来还可以使用布局xml的但是报错了
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     >
    
	<TextView 
       android:text="====Gif图片测试布局===="
        android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       />
    
     <com.cayden.videodemo.view.MyGifView 
       android:id="@+id/iv"
       android:layout_height="wrap_content"
       android:layout_width="wrap_content"
       android:layout_margin="20dp"
       /> 
</LinearLayout>

以上是部分代码,仅供参考!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: