android实现gif动态图的使用

在android中显示一个静态图片比如png jpg等等都很方便,但是如果要显示一个gif 动态图片就需要进行一些处理。

本文是采用自定义view 然后进行重新onDraw方法来实现

首先自定义View【MyGifView.java】

[java] view plaincopy

/** 
 * 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

[java] view plaincopy

/** 
 * 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的但是报错了

[java] view plaincopy

<?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> 
上一篇:[AliOS-Things 之 MQTT] 接入阿里云物联网套件


下一篇:Json解析