Android中显示gif动态图片

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

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

首先自定义View【MyGifView.java】

[java] view plain copy
在CODE上查看代码片派生到我的代码片

    /** 
     * 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 plain copy
在CODE上查看代码片派生到我的代码片

    /** 
     * 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 plain copy
在CODE上查看代码片派生到我的代码片

    <?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"  
           />  <span id="transmark"></span>
          
         <com.cayden.videodemo.view.MyGifView   
           android:id="@+id/iv"  
           android:layout_height="wrap_content"  
           android:layout_width="wrap_content"  
           android:layout_margin="20dp"  
           />   
    </LinearLayout>  


以上是部分代码,仅供参考!


posted on 2016-09-08 11:26  miaozhenzhong  阅读(195)  评论(0编辑  收藏  举报

导航