zoukankan      html  css  js  c++  java
  • Android播放GIF动画

    Android支持GIF动画,但是如果利用ImageView标签直接写在布局文件中:
    Xml代码 复制代码 收藏代码
    1. <ImageView android:id="@+id/gifpicture"  
    2. android:layout_width="fill_parent"  
    3. android:layout_height="wrap_content"  
    4. android:src="@drawable/animation"    /> 

    程序只能加载GIF动画的第一帧。效果如下:


    如果想要正常播放GIF动画,需要借助Movie实现。写了一个简单示例,程序目录结构如下:


    animation.gif是需要播放的GIF动画。
    MainActivity实现了加载GIF动画的功能。
    Java代码 复制代码 收藏代码
    1. public class MainActivity extends Activity {  
    2.      
    3.     private Movie mMovie;  
    4.     private long mMovieStart; 
    5.     /** Called when the activity is first created. */  
    6.     @Override  
    7.     public void onCreate(Bundle savedInstanceState) {  
    8.         super.onCreate(savedInstanceState);  
    9.        setContentView(new CustomGifView(this));  
    10.           } 
    11.     class CustomGifView extends View { 
    12.         public CustomGifView(Context context) {  
    13.             super(context);  
    14.             mMovie = Movie.decodeStream(getResources().openRawResource(  
    15.                     R.drawable.animation)); 
    16.         }  
    17.          
    18.         public void onDraw(Canvas canvas) { 
    19.             long now = android.os.SystemClock.uptimeMillis();  
    20.              
    21.             if (mMovieStart == 0) { // first time  
    22.                 mMovieStart = now;  
    23.             }  
    24.             if (mMovie != null) {  
    25.                  
    26.                 int dur = mMovie.duration();  
    27.                 if (dur == 0) {  
    28.                     dur = 1000;  
    29.                 }  
    30.                 int relTime = (int) ((now – mMovieStart) % dur);                 
    31.                 mMovie.setTime(relTime);  
    32.                 mMovie.draw(canvas, 0, 0);  
    33.                 invalidate();  
    34.             }  
    35.         } 
    36.     } 

    内部类CustomGifView 利用Movie播放GIF动画。解释一下:
    Java代码 复制代码 收藏代码
    1. mMovie = Movie.decodeStream(getResources().openRawResource(R.drawable.animation)); 

    将GIF动画以文件流的形式转换成Movie。
    Java代码 复制代码 收藏代码
    1. public void onDraw(Canvas canvas) { 
    2.         long now = android.os.SystemClock.uptimeMillis();  
    3.          
    4.         if (mMovieStart == 0) { // first time  
    5.             mMovieStart = now;  
    6.         }  
    7.         if (mMovie != null) {  
    8.              
    9.             int dur = mMovie.duration();  
    10.             if (dur == 0) {  
    11.                 dur = 1000;  
    12.             }  
    13.             int relTime = (int) ((now – mMovieStart) % dur);                 
    14.             mMovie.setTime(relTime);  
    15.             mMovie.draw(canvas, 0, 0);  
    16.             invalidate();  
    17.         }  
    18.     } 

       invalidate();作用是刷新当前View,这样onDraw方法重复执行,Movie就能画出GIF动画的每一帧。到此,GIF动画就能正常播放了。



    源代码见:http://bigcateasymorse.googlecode.com/svn/trunk/android_gif_demo/
  • 相关阅读:
    OnGUI 音频
    Java 8 的一些新特性
    获取文件编码格式
    js 常用 正则
    C#中这个算是什么
    数据的批量增加
    Ehcache的配置(自学,有问题请指出)
    Linux 下配置和使用java、Tomcat
    StringBuffer和StringBuildr的区别
    Oracle中复制一张表的结构,用sql语句复制一张表结构
  • 原文地址:https://www.cnblogs.com/bmate/p/2674409.html
Copyright © 2011-2022 走看看