android实现gif动态图的使用

简介: 在android中显示一个静态图片比如png jpg等等都很方便,但是如果要显示一个gif 动态图片就需要进行一些处理。本文是采用自定义view 然后进行重新onDraw方法来实现首先自定义View【MyGifView.

在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> 
目录
相关文章
|
Android开发
flutter中实现仿Android端的onResume和onPause方法
flutter中实现仿Android端的onResume和onPause方法
|
缓存 JSON Java
java 实现读取txt文件,反射创建对象,android 手机缓存文件目录
java 实现读取txt文件,反射创建对象,android 手机缓存文件目录
407 1
java 实现读取txt文件,反射创建对象,android 手机缓存文件目录
|
Android开发 容器
Android实现面包屑效果,支持Fragment联动
Android实现面包屑效果,支持Fragment联动
|
Android开发
Android实现连线题效果
Android实现连线题效果
|
移动开发 JavaScript Android开发
通过howler.js实现在Android下的微信浏览器自动播放音频
通过howler.js实现在Android下的微信浏览器自动播放音频
498 0
通过howler.js实现在Android下的微信浏览器自动播放音频
|
数据库 Android开发
android 多级下拉菜单实现教程 greendao使用
android 多级下拉菜单实现教程 greendao使用
211 0
android 多级下拉菜单实现教程 greendao使用
|
存储 API Android开发
深入剖析Android四大组件(四)——Messenger实现Android IPC
深入剖析Android四大组件(四)——Messenger实现Android IPC
138 2
|
监控 前端开发 Java
Android自定义控件(十)——SurfaceView实战实现天气APP背景移动效果
Android自定义控件(十)——SurfaceView实战实现天气APP背景移动效果
429 0
|
XML 开发工具 Android开发
Android自定义控件(十三)——实现CSDN搜索框文字提示容器
Android自定义控件(十三)——实现CSDN搜索框文字提示容器
294 0
Android自定义控件(十三)——实现CSDN搜索框文字提示容器
|
Android开发
Android自定义控件(七)——ShapeDrawable实现放大镜效果
Android自定义控件(七)——ShapeDrawable实现放大镜效果
466 0
Android自定义控件(七)——ShapeDrawable实现放大镜效果