`

Android播放GIF动画

 
阅读更多
Android支持GIF动画,但是如果利用ImageView标签直接写在布局文件中:
<ImageView android:id="@+id/gifpicture" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:src="@drawable/animation"    />

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


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


animation.gif是需要播放的GIF动画。
MainActivity实现了加载GIF动画的功能。
public class MainActivity extends Activity { 
    
    private Movie mMovie; 
    private long mMovieStart;
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
       setContentView(new CustomGifView(this)); 
          }
    class CustomGifView extends View {
        public CustomGifView(Context context) { 
            super(context); 
            mMovie = Movie.decodeStream(getResources().openRawResource( 
                    R.drawable.animation));
        } 
        
        public void onDraw(Canvas canvas) {
            long now = android.os.SystemClock.uptimeMillis(); 
            
            if (mMovieStart == 0) { // first time 
                mMovieStart = now; 
            } 
            if (mMovie != null) { 
                
                int dur = mMovie.duration(); 
                if (dur == 0) { 
                    dur = 1000; 
                } 
                int relTime = (int) ((now – mMovieStart) % dur);                
                mMovie.setTime(relTime); 
                mMovie.draw(canvas, 0, 0); 
                invalidate(); 
            } 
        }
    }
}

内部类CustomGifView 利用Movie播放GIF动画。解释一下:
mMovie = Movie.decodeStream(getResources().openRawResource(R.drawable.animation));

将GIF动画以文件流的形式转换成Movie。
public void onDraw(Canvas canvas) {
        long now = android.os.SystemClock.uptimeMillis(); 
        
        if (mMovieStart == 0) { // first time 
            mMovieStart = now; 
        } 
        if (mMovie != null) { 
            
            int dur = mMovie.duration(); 
            if (dur == 0) { 
                dur = 1000; 
            } 
            int relTime = (int) ((now – mMovieStart) % dur);                
            mMovie.setTime(relTime); 
            mMovie.draw(canvas, 0, 0); 
            invalidate(); 
        } 
    }

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






源代码见:http://bigcateasymorse.googlecode.com/svn/trunk/android_gif_demo/
  • 大小: 11.5 KB
  • 大小: 38.8 KB
  • 大小: 14.9 KB
  • 大小: 9.5 KB
分享到:
评论
19 楼 zjhangia 2014-08-19  
在4.0中关闭硬件加速就可以了在配置文件中加入android:hardwareAccelerated="false"
详细请参照http://blog.csdn.net/gucun4848/article/details/7991713
18 楼 zjhangia 2014-08-19  
在4.0中关闭硬件加速就可以了在配置文件中加入android:hardwareAccelerated="false"
详细请参照android:hardwareAccelerated="true"
17 楼 jikun 2014-07-08  
你好楼主  我问下https://github.com/koral--/android-gif-drawable  如何用啊 我试了但是不行啊
16 楼 luwei35910 2014-04-22  
楼主你好 我的是大一点帧数多的动画可以播放
帧数少的 int dur = mMovie.duration(); 会为0值
这时候就显示静态图片了 请问如何破
15 楼 fengkang 2014-01-17  
gundumw100 写道
zhwanwslj 写道
LZ你好,我试了下Movie播放gif,但是在2.3的系统上可以很好的播放,但在4.0的系统上却不能显示更不能播放,这个你有试过吗


你可以试试这个,不过它是用jni实现的
android-gif-drawable 支持fig显示的view
https://github.com/koral--/android-gif-drawable

你把那个控件的硬件加速属性关闭应该就可以了,3.0以上是默认开启硬件加速的
14 楼 zhwanwslj 2014-01-16  
gundumw100 写道
zhwanwslj 写道
LZ你好,我试了下Movie播放gif,但是在2.3的系统上可以很好的播放,但在4.0的系统上却不能显示更不能播放,这个你有试过吗


你可以试试这个,不过它是用jni实现的
android-gif-drawable 支持fig显示的view
https://github.com/koral--/android-gif-drawable

JNI不是很熟练,在4.0系统上你试过Movie播放gif吗?或者这个问题有什么解决方法吗?谢谢
13 楼 gundumw100 2014-01-15  
zhwanwslj 写道
LZ你好,我试了下Movie播放gif,但是在2.3的系统上可以很好的播放,但在4.0的系统上却不能显示更不能播放,这个你有试过吗


你可以试试这个,不过它是用jni实现的
android-gif-drawable 支持fig显示的view
https://github.com/koral--/android-gif-drawable
12 楼 zhwanwslj 2014-01-15  
LZ你好,我试了下Movie播放gif,但是在2.3的系统上可以很好的播放,但在4.0的系统上却不能显示更不能播放,这个你有试过吗
11 楼 李传智 2013-12-30  
能留下,联系方式吗,我有个问题请教你,我的qq :794987885
10 楼 gundumw100 2013-12-27  
带个回家 写道
onDraw里面有 invalidate();   ? 并且没有判断 ? 不就死循环了么 ? 真不知道那些说试过了没问题是不是人有问题 ?


是谁规定了一定要判断呢?就不能一直这样“循环动画”下去?
9 楼 带个回家 2013-12-27  
onDraw里面有 invalidate();   ? 并且没有判断 ? 不就死循环了么 ? 真不知道那些说试过了没问题是不是人有问题 ?
8 楼 lyx0206331 2013-12-05  
我这里没法播放啊
7 楼 fengkang 2013-09-12  
顶,3m多的图都可以正常显示没有oom错误!
6 楼 gundumw100 2013-05-28  
kikiash 写道
那如果想在这一屏幕的其他地方再显示其他东西要写在哪呢?

你一定是新手。这个问题等你搞通了android再说。
5 楼 kikiash 2013-05-28  
那如果想在这一屏幕的其他地方再显示其他东西要写在哪呢?
4 楼 Jj1105190650 2013-04-07  
将好多图片放到ListView里面,发现程序直接退出,求解
3 楼 etjnety 2012-09-11  
顶,太给力了,学习了
2 楼 f839903061 2012-08-20  
ok了,我试过 了,没问题!哈哈哈哈哈
1 楼 紫雨1206 2012-04-17  
为什么我的还是只播第一帧啊

相关推荐

    Android 播放Gif 动画

    在Android平台上,播放Gif动画是一项常见的需求,无论是加载指示器、按钮反馈还是其他动态展示效果,Gif图像都能提供丰富的视觉体验。本篇将详细探讨如何在Android应用中实现Gif动画的播放。 首先,我们需要理解Gif...

    android播放gif动画

    在Android平台上,播放GIF动画是一项常见的需求,无论是用于加载指示器、表情符号还是其他动态效果。本篇文章将深入探讨如何在Android应用中实现GIF动画的播放,并提供相关的技术知识点。 首先,我们需要理解GIF...

    Android播放GIF动画源码

    本示例项目“TestGIFDemo”旨在演示如何在Android应用中播放GIF动画,这主要涉及到以下几个核心知识点: 1. **GIF格式理解**:GIF是一种流行的动画图像格式,它支持透明度和循环播放,特别适合于制作简单的动态效果...

    android 播放GIF动画

    在Android平台上,播放GIF动画是一项常见的需求,无论是用于加载指示、表情符号还是其他互动元素。GIF是一种支持多帧的图像格式,...通过不断地实践和学习,开发者可以掌握更多关于Android中GIF动画播放的高级技巧。

    Android播放Gif动画[收集].pdf

    使用`AnimationDrawable`和`ProgressBar`的技巧可以实现基本的Gif动画播放,而第三方库则提供了更强大的功能和更好的用户体验。在实际开发中,根据项目需求和性能考虑,可以选择合适的方法来实现Gif动画的播放。

    Android播放gif动画,增加屏幕掉金币效果

    本话题主要关注如何在Android应用中播放GIF动画,特别是创建一个屏幕掉金币的效果。首先,我们来详细讲解一下GIF动画在Android中的处理。 GIF是一种支持动图的图像格式,它包含多帧连续图像,当快速连续播放这些帧...

    gifview android 播放gif动画

    然而,Android原生的ImageView并不支持直接播放GIF动画,因此需要借助第三方库来实现这个功能。本篇文章将详细讲解如何在Android应用中使用`GifView`库来播放GIF动画。 `GifView`是一个专为Android设计的库,用于在...

    android播放gif图片动画

    在Android开发中,有时我们需要在应用中展示动态的GIF图片,这通常涉及到对GIF动画的播放。本文将深入探讨如何在Android平台上实现在应用中播放GIF动画,并介绍一个已经封装好的jar包,方便开发者直接使用。 GIF是...

    android 加载gif动画

    在Android中,原生的ImageView组件并不支持直接加载和播放GIF动画,因此我们需要借助第三方库或者自定义View来实现。 1. **第三方库**: - **NineOldAndroids**:这是一款兼容Android 2.1及以上的库,用于提供对...

    Android GIf动画播放

    总之,Android平台上实现GIF动画播放有多种方式,既可以借助成熟的库,也可以自行编写动画引擎。选择哪种方式取决于具体需求和项目规模。理解GIF格式、熟悉Android的绘图机制,以及掌握内存管理和性能优化技巧,都是...

    Android 扩展ImageView来播放gif动画

    在Android开发中,为了实现动态效果,我们常常需要在ImageView中播放GIF动画。这个任务可以通过扩展Android原生的ImageView类来实现。本教程将详细讲解如何创建一个自定义的`PowerImageView`,用于播放GIF动画。 ...

    Android显示gif动画的例子

    在Android平台上,开发人员经常需要实现显示动态效果,如GIF动画。本篇文章将深入探讨如何在Android应用中轻松地展示GIF动画,基于提供的资源`GIFView.jar`。这个库提供了一种简单的方法来播放GIF文件,使得开发者...

    Android 显示GIF动画源码

    首先,Android系统本身并不支持直接在ImageView中播放GIF动画,因此我们需要借助第三方库或自定义控件来实现这一功能。在“GifViewDemo”中,可能使用了如NineOldAndroids、Glide、Picasso等库,或者是自定义了一个...

    android 实现gif动画

    在Android开发中,实现GIF动画,特别是在TextView中展示GIF表情,是一项常见的需求,尤其在社交应用或者消息传递场景中。以下将详细介绍如何在Android中实现这一功能,并且会探讨一些相关的技术点。 首先,我们需要...

    Android之gif动画实现

    在Android平台上,实现GIF动画是一项常见的需求,无论是用于加载指示器、按钮效果还是其他动态展示。本教程将深入探讨如何在Android应用中实现GIF动画,并提供一个名为`GifDemo`的示例项目来帮助理解。 首先,我们...

    android显示GIF动画

    在Android中,如果直接使用ImageView,它是无法播放GIF动画的,因此我们必须引入额外的库。 一个常用的第三方库是`NineOldAndroids`和`Android-Universal-Image-Loader`,它们在早期版本的Android上提供了对GIF的...

    android 显示gif动画实例

    在Android平台上,由于其原生系统并不直接支持GIF动画的显示,开发者通常需要借助第三方库来实现这一功能。这个实例“android 显示gif动画实例”显然是为了帮助开发者解决这个问题,通过提供一个实际的项目代码,使...

Global site tag (gtag.js) - Google Analytics