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方法
|
2月前
|
Android开发 UED
Android 中加载 Gif 动画
【10月更文挑战第20天】加载 Gif 动画是 Android 开发中的一项重要技能。通过使用第三方库或自定义实现,可以方便地在应用中展示生动的 Gif 动画。在实际应用中,需要根据具体情况进行合理选择和优化,以确保用户体验和性能的平衡。可以通过不断的实践和探索,进一步掌握在 Android 中加载 Gif 动画的技巧和方法,为开发高质量的 Android 应用提供支持。
|
7月前
|
XML 算法 Java
Android Studio App开发之利用图像解码器ImageDecoder播放GIF动图、Webp、HEIF图片(附源码 简单实用)
Android Studio App开发之利用图像解码器ImageDecoder播放GIF动图、Webp、HEIF图片(附源码 简单实用)
447 0
|
Android开发
Android 动画之Gif动画的用法(适用于Android9.0以上和以下)
Android 动画之Gif动画的用法(适用于Android9.0以上和以下)
151 0
|
缓存 JSON Java
java 实现读取txt文件,反射创建对象,android 手机缓存文件目录
java 实现读取txt文件,反射创建对象,android 手机缓存文件目录
456 1
java 实现读取txt文件,反射创建对象,android 手机缓存文件目录
|
Android开发 容器
Android实现面包屑效果,支持Fragment联动
Android实现面包屑效果,支持Fragment联动
|
Android开发
Android实现连线题效果
Android实现连线题效果
|
移动开发 JavaScript Android开发
通过howler.js实现在Android下的微信浏览器自动播放音频
通过howler.js实现在Android下的微信浏览器自动播放音频
563 0
通过howler.js实现在Android下的微信浏览器自动播放音频
|
数据库 Android开发
android 多级下拉菜单实现教程 greendao使用
android 多级下拉菜单实现教程 greendao使用
256 0
android 多级下拉菜单实现教程 greendao使用
|
存储 API Android开发
深入剖析Android四大组件(四)——Messenger实现Android IPC
深入剖析Android四大组件(四)——Messenger实现Android IPC
152 2