Android中显示gif动态图片

本文介绍了一种在Android中通过自定义View实现GIF动画的方法。通过创建MyGifView类并重写onDraw方法,可以有效地播放GIF动画。此外,还提供了一个简单的示例Activity用于展示如何使用这个自定义View。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值