Android如何播放gif动画

            做安卓开发的朋友都知道,在安卓系统中是不能直接播放gif图片的动画的,像正常的gif动画图片在电脑上可以直接播放动画,但是在安卓系统中却不能,那么这个怎么解决呢?这里提供一种解决办法,就是使用AnimationDrawable 这一函数使其支持逐帧播放,但是这个就要求如何把gif动画打散,让他成为每一帧的图片,然后才能在安卓中实现播放.

            近段时间使用PhoneGap开发游戏,实在是头疼不已,android系统自带的webkit并不支持CSS3动画属性(绝大多数不支持),导致动画处理异常困难,如果利用JS,大量的图片导致盒子难以承受,想来想去有个思路,能否发挥phoneGap和Android原生各自的优势,扬长避短,phoneGap开发的移动应用由于核心是WEB,在响应及内存释放上与原生代码相比差了很多,所以决定由WEB处理核心的逻辑部分,动画,声音等比较耗CPU的,比较影响用户体验的这些UI元素放在原生中处理。通过phoneGap的插件技术或者用webview的JS和java的互调,来完成WEB工程和本地的动画,声音等逻辑控制。

           

            以下是关于Android如何播放Gif动画的内容,此内容在网上已经很多。在《疯狂Android讲义》中李刚也有所介绍和相关的源代码。

           

 1.android实现播放gif动画,如何将gif动画打散,将gif图片打散本文介绍两个工具,可以帮我们打散图片:

    gifsplitter2.0     下载地址: http://yunpan.cn/QbvwWIYVeWrPE

    easygifanimator    下载地址: http://yunpan.cn/QbvwWd8Zy3BnF

    第一个软件分割图片都是bmp图片,图片比较大,这里不推荐使用,本站推荐使用第二种软件

    以上两种软件的使用方法本站不在详细赘述,本站详细介绍安卓开发中使用的代码

 2.android实现播放gif动画,假设我们已经得到了gif动画被打散的图片,分别为:x0.png、x1.png、x2.png、        x3.png,那么我们下面来看如何播放,布局以及代码如何实现


 (1)首先我们来看布局文件代码

<?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/winB_1" /> 
    <item android:duration="150" android:drawable="@drawable/winB_2" /> 
    <item android:duration="150" android:drawable="@drawable/winB_3" /> 
    <item android:duration="150" android:drawable="@drawable/winB_4" /> 
   <item android:duration="150" android:drawable="@drawable/winB_5" /> 
</animation-list>
   对应的item 为顺序的图片从开始到结束,duration为每张逐帧播放间隔,oneshot 为false 代表循环播放,设置为true 即播放一次即停止

public class animActivity extends Activity implements OnClickListener {
	ImageView iv = null;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		iv = (ImageView) findViewById(R.id.ImageView01);
		iv.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		// TODO Auto-generated method stub
		AnimationDrawable anim = null;
		Object ob = iv.getBackground();
		anim = (AnimationDrawable) ob;
		anim.stop();
		anim.start();
	}
}

说明:使用上述方法不发挥默认自动播放,需要有事件触发才可播放动画

如果自动播放的话:在values目录下建立:styles.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> 

在布局main.xml下建立

<ProgressBar android:id="@+id/ProgressBar01" style="@style/animStyle"
		android:layout_width="128px" android:layout_height="128px"></ProgressBar>



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值