做安卓开发的朋友都知道,在安卓系统中是不能直接播放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>