android中gif图片的显示

本文介绍了在Android开发中处理gif图片显示问题的方法,包括作为Movie播放和使用AnimationDrawable实现循环播放,以及将gif分解为多帧并使用AnimationDrawable显示。通过实例演示了gif图片在Android应用中的正确显示方式。

在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图片显示效果:

demo中gif图片显示效果

 

2. 利用Android的AnimationDrawable进行处理

但是并不是所有的gif图片都可以这样显示的,有些的就显示不了,出现不正常的情况

如果下面的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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值