在Android开发中,在进行图片显示的时候,发现对于gif类的图片显示有些问题,对于gif图片属于连帧图片,也就是多幅图片组成一张图片,如果仅仅的用canvas.drawBitmap时,会发现,只显示图片的第一帧。有如下处理方式
1. 做为Movie时进行播放
(movie = Movie.decodeStream(context.getResources().openRawResource(R.drawable.animated_gif))):
//开始进行绘画之前,取得当前的时间
long now = SystemClock.uptimeMillis();
//在类中定义int类型的startTime,当第一次时startTime = 0的,把第一次绘制的时间赋值给startTime
if(startTime == 0) startTime = now;
//当movie不为null时
if(movie != null){
//取得该gif的总时长
int duration = movie.duration();
//如果为0,则给一个默认值
if(duration == 0)
duration = 1000;
//得到该次运行时的时间差,与movie的总时间求余时,可以得到movie有某点时间,为此可以进行反复循环
int replay = (int) ((now - startTime ) % duration);
//将movie的时间设置为replay点
movie.setTime(replay);
//将movie的内容绘制在画板上
movie.draw(canvas, 50, 50);
Demo例子中的gif图片显示效果:

2. 利用Android的AnimationDrawable进行处理
但是并不是所有的gif图片都可以这样显示的,有些的就显示不了,出现不正常的情况
如果下面的gif图片就显示不了(为什么显示不了,我也不清楚):

对于该种情况的显示,采取的是一种将gif图片中的每帧取出来,利用android的AnimationDrawable方式进行
实现。
步骤:
a. 在res下建立anim的文件夹,定义动画test.xml
<?xml version="1.0" encoding="UTF-8"?>
<animation-list android:oneshot="false" xmlns:android="http://schemas.android.com/apk/res/android"> <item android:duration="150" android:drawable="@drawable/hello00" />
<item android:duration="150" android:drawable="@drawable/hello01" />
<item android:duration="150" android:drawable="@drawable/hello02" />
<item android:duration="150" android:drawable="@drawable/hello03" />
</animation-list>
其中上面的android:oneshot="false"为反复播放动画,当为true时,只播放一次动画
b. 在values建立style.xml文件,定义自动播放的样式
<?xml version="1.0" encoding="UTF-8"?>
<resources>
<style name="animStyle" parent="@android:style/Widget.ProgressBar.Large">
<item name="android:indeterminateDrawable">@anim/test</item>
</style>
</resources>
该处是利用进行条能自动播放的效果,而引用其样式的
c. 在layout文件夹下的main.xml文件中,将其做为一个进度条进行显示
<ProgressBar android:id="@+id/ProgressBar01" style="@style/animStyle" android:layout_width="80px" android:layout_height="80px"/>
这样就可以达到正常效果了。
原文地址:http://terryblog.blog.51cto.com/1764499/388226
分享到:
相关推荐
要实现在Android应用中显示GIF图片,我们可以使用以下几种方法: 1. **利用第三方库**:由于Android原生API对GIF支持有限,通常我们会借助第三方库,如`NineOldAndroids`(用于兼容早期Android版本)和`Glide`、`...
在Android开发中,显示GIF图片是一项常见的需求,无论是本地存储的GIF图像还是网络上的资源,都需要一种有效的方法来处理。本篇文章将详细介绍如何在Android应用中利用`Movie`类来显示本地和网络的GIF图片。 首先,...
利用android开源库android-gif-drawable和android-async-http不仅能显示本地的gif图片,还能从网络上获取Gif图片并显示.即使是较大的gif图片,也不会报OOM异常。
本文将深入探讨如何在Android中有效地显示gif图片,并提供相关的知识点。 首先,Android原生的ImageView控件并不支持直接显示GIF动态图,因此我们需要借助第三方库或者自定义控件来实现这个功能。其中,两个常用的...
总之,要在`Android TextView`中显示GIF图片,你可以选择使用第三方库如`Glide`,或者自定义组件和`Spanned`实现。无论哪种方式,都需要对Android UI组件、图片加载机制以及动画处理有深入的理解。在实际项目中,应...
在Android开发中,动态显示GIF图片是一项常见的需求,尤其在制作动画效果或者加载等待界面时。本教程将深入探讨如何在Activity中实现这一功能,同时讲解如何对GIF图片的播放进行监听。 首先,我们需要引入能够处理...
本教程将深入探讨如何在Android应用中正确地显示Gif图片。 一、Gif解析原理 Gif文件包含一系列的图像帧和控制信息,通过按顺序快速播放这些帧来形成动画效果。在Android中,我们需要一个能够解析这种格式并逐帧渲染...
以下是一个关于如何在Android应用中显示GIF图片的详细步骤和知识点。 1. **选择库** 在Android开发中,常见的用于显示GIF的库有`GIFDrawable`(自Android 4.3引入,但功能有限)和第三方库如`NineOldAndroids`、`...
android开发gif图片显示,源码。
在这种情况下,我们就需要创建一个自定义的GIF图片显示控件。本文将深入探讨如何实现这样一个自定义的GIFVIEW,并探讨其中涉及到的关键技术和资源优化策略。 一、GIF图片格式解析 GIF是一种基于LZW无损压缩算法的...
本篇文章将详细介绍如何在Android应用中加载和显示GIF图片。 首先,你需要添加一个支持GIF显示的库到你的项目中。最常用的库之一是`Glide`和`NineOldAndroids`的组合。`Glide`是一个强大的图片加载库,而`...
android显示gif图片的小例子。。。。
在Android平台上,显示GIF动画图像可能比显示静态图片稍微复杂一些,因为默认的ImageView组件并不支持GIF格式。为了在Android应用中展示...理解这些概念并熟练运用,可以帮助你在Android应用中实现流畅的GIF图片显示。
在Android应用开发中,有时我们需要在界面上展示动态GIF图像,这时`android-gif-drawable`库就显得非常实用。这个库是专门为在Android平台上高效、流畅地播放GIF动画而设计的。本文将深入探讨如何使用`android-gif-...
在Android平台上,显示GIF图片是一项常见的需求,特别是在创建动态壁纸、消息提示或者动画效果时。在Android 2.1(API级别7)及更高版本中,我们可以利用多种方法来实现这一功能。以下将详细介绍如何在Android ...
在Android开发中,由于系统默认不提供专门用于显示GIF动画的控件,开发者需要通过第三方库或者自定义控件的方式来实现GIF图片的播放。本文将深入探讨如何在Android应用中显示GIF格式的图片,并提供一种实现方法。 ...
在本示例中,我们将探讨如何利用引入的`GifView.jar`包来实现在Android应用中显示Gif图片。首先,我们需要了解`GifView`这个类,它是`GifView.jar`包中的核心组件,专门用于处理Gif动画的显示。 1. **GifView 类...
综上所述,解决Android中显示大GIF图片导致的内存溢出问题,需要结合多种策略,包括但不限于选择合适的GIF解析库、使用JNI进行优化、异步加载、流式处理、内存管理和预处理等。同时,不断地测试和调整,以找到最佳的...
1.增加gif在解码过程中的图片显示方式,当gif比较大时,解码有一个过程,需要一些时间,在此解码过程中,可以设置三种gif显示方式: * WAIT_FINISH.这种方式在解码过程中,不会显示任何图片,等到Gif全部解码结束...