1 创建 xml 动画文件
在 android 项目工程中的 drawable 目录下创建动画文件,如我这里创建的 loading.xml

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false"
>
<item
android:drawable="@mipmap/ani_1"
android:duration="800" />
<item
android:drawable="@mipmap/ani_2"
android:duration="800" />
<item
android:drawable="@mipmap/ani_3"
android:duration="800" />
<item
android:drawable="@mipmap/ani_4"
android:duration="800" />
<item
android:drawable="@mipmap/ani_5"
android:duration="800" />
<item
android:drawable="@mipmap/ani_6"
android:duration="800" />
<item
android:drawable="@mipmap/ani_7"
android:duration="800" />
<item
android:drawable="@mipmap/ani_8"
android:duration="800" />
</animation-list>
设置android:oneshot属性为true,表示此次动画只执行一次,最后停留在最后一帧。设置为false则动画循环播放。文件可以添加为image背景,触发的时候播放。
2 加载使用
在你的 activity 中,直接将这个动画文件使用一个 imageview 来加载显示,代码如下:
public class mainactivity extends appcompatactivity {
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
imageview limageview = findviewbyid(r.id.imageview);
//设置图片
limageview.setimageresource(r.drawable.loading);
//动
animationdrawable lanimationdrawable = (animationdrawable) limageview.getdrawable();
lanimationdrawable.start();
}
}
3 聊一聊 animationdrawable
drawable animation可以加载drawable资源实现帧动画。animationdrawable是实现drawable animations的基本类
有时 调用了 animationdrawable.start方法来启动动画,但是并没有出现效果。
3.1 使用 viewtreeobserver
viewtreeobserver.onpredrawlistener lonpredrawlistener=new viewtreeobserver.onpredrawlistener(){
@override
public boolean onpredraw() {
lanimationdrawable.start();
return true; //注意此行返回的值
}
};
//绑定视图观察者
limageview.getviewtreeobserver().addonpredrawlistener(lonpredrawlistener);
3.2 使用 runanim
public class mainactivity extends appcompatactivity {
@override
protected void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.activity_main);
start3();
}
private animationdrawable manimationdrawable;
public void start3() {
imageview limageview = findviewbyid(r.id.imageview);
//设置图片
limageview.setimageresource(r.drawable.loading);
//动
manimationdrawable = (animationdrawable) limageview.getdrawable();
runanim runanim = new runanim();
runanim.execute("");
}
class runanim extends asynctask<string, string, string> {
@override
protected string doinbackground(string... params) {
if (!manimationdrawable.isrunning()) {
manimationdrawable.stop();
manimationdrawable.start();
}
return "";
}
}
}
3.3 在 activity 的 onwindowfocuschanged 中调用
@override
public void onwindowfocuschanged(boolean hasfocus)
{
manimationdrawable.start();
super.onwindowfocuschanged(hasfocus);
}
完毕
源码在这里
以上就是android结合xml实现帧动画的详细内容,更多关于android 实现帧动画的资料请关注其它相关文章!
我是帝王么