在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>

最新文章

  1. Nginx反向代理的工作方式
  2. apache2.2 做后端,增加真实ip到日志中
  3. SSIS变量属性中EvaluateAsExpression设置的作用
  4. #!/usr/bin/env python与#!/usr/bin/python的区别
  5. Linux解决Device eth0 does not seem to be present
  6. 【分享】Maven插件的源码下载(SVN)
  7. Oracle基础&lt;4&gt;--程序包
  8. BNUOJ-26579 Bread Sorting YY
  9. 关于laravel框架的Auth::attempt验证失败
  10. 使用Qt编写服务器端程序(包括Http传输服务器端)的方法
  11. NVIDIA+关联2015写学校招收评论(嵌入式方向,上海)
  12. IOS SDK相机的详细解释/画廊(默认+他们的高清摄像头接口)
  13. CSS实现导航条Tab切换的三种方法
  14. weblogic java.lang.OutOfMemoryError: PermGen space 问题解决方法
  15. 微信小程序左滑删除功能
  16. Vector与ArrayList区别
  17. Makefile工程管理器及万能模板
  18. Java 中初始化 List 集合的 6 种方式!
  19. 最小树形图——朱刘算法(Edmonds)
  20. stm32f7699遇到的犯二问题

热门文章

  1. Splay伸展树入门(单点操作,区间维护)附例题模板
  2. 进程间通信——XSI IPC之消息队列
  3. ACM pie
  4. Django 跨域请求处理
  5. Winform DevExpress控件库(一) DevExpress控件库的安装与新建第一个DevExpress项目
  6. Bootstrap3 栅格系统-栅格参数
  7. 20160221.CCPP体系详解(0031天)
  8. Compass实战 站内搜索
  9. 【我的书】Unity Shader的书 — 目录(2016.5.19最后一次更新)
  10. 错误问题:OpenGL version to old,GLViewinitWithRect(const stdbasic_stringchar,stdchar_traitschar,stdalloca