欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android结合xml实现帧动画

程序员文章站 2022-03-17 17:37:59
1 创建 xml 动画文件在 android 项目工程中的 drawable 目录下创建动画文件,如我这里创建的 loading.xml

1 创建 xml 动画文件

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

Android结合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 实现帧动画的资料请关注其它相关文章!