Android结合xml实现帧动画
程序员文章站
2022-03-17 17:37:59
1 创建 xml 动画文件在 android 项目工程中的 drawable 目录下创建动画文件,如我这里创建的 loading.xml
1 创建 xml 动画文件
2 加载使用
3 聊一聊 animationdrawable
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 实现帧动画的资料请关注其它相关文章!