android实现gif动态图的使用

来源:互联网 发布:四海承风软件 编辑:程序博客网 时间:2024/04/28 21:15

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