Android动画-Drawable Animation(帧动画)

文章导航

概述

Drawable Animation是逐帧动画,就像GIF图片,通过一系列Drawable依次显示来模拟动画的效果,那么使用它之前必须先定义好各个帧。我们可以通过代码定义,也可以使用xml文件定义,一般使用后者

动画定义

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">
    <item android:drawable="@drawable/frame_1" android:duration="200" />
    <item android:drawable="@drawable/frame_2" android:duration="200" />
    <item android:drawable="@drawable/frame_3" android:duration="200" />
    <item android:drawable="@drawable/frame_4" android:duration="200" />
</animation-list>

其中android:oneshot="true"表示该动画只播放一次,等于false时则循环播放 平常我们加载中动画就可以这样实现

有时我们想每一帧是由多个图片组成怎么办

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="true">
    <item android:duration="100">  
        <layer-list>  
            <item android:drawable="@drawable/login_loading_00" />  
            <item android:drawable="@drawable/login_loading_10" />  
        </layer-list>  
    </item> 
</animation-list>

这样图片就一层层的叠起来了

动画调用

public class MainActivity extends Activity {
	
	private AnimationDrawable loadingAnimation;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_main);
		
		//将该逐帧xml文件设置为ImageView的背景
		ImageView loadingImg = (ImageView) findViewById(R.id.loading);
		loadingImg.setBackgroundResource(R.drawable.loading);
		loadingAnimation = (AnimationDrawable) loadingImg.getBackground();
	}

	/**
	 * 触摸屏幕,结束动画
	 */
	public boolean onTouchEvent(MotionEvent event) {
		if (event.getAction() == MotionEvent.ACTION_DOWN) {
			loadingAnimation.stop();
			return true;
		}
		return super.onTouchEvent(event);
	}

	/**
	 * activity显示到屏幕则开启动画
	 */
	@Override
	public void onWindowFocusChanged(boolean hasFocus) {
		// TODO Auto-generated method stub
		super.onWindowFocusChanged(hasFocus);
		if (hasFocus)
			loadingAnimation.start();
	}

}

需要注意的是,不能在onCreate()方法中调用AnimationDrawablestart()方法,因为此时AnimationDrawable还未真正加载到界面中。所以,如果想启动界面就自动运行动画,可以在OnWindowFocusChanged(boolean hasFocus)中启动动画。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏彭湖湾的编程世界

【CSS】Houdini, CSS的成人礼

简单地讲,Paint API就是允许你通过JavaScript注册一个背景函数,类似于linear-gradient()那种,在定义时候可以提供Canvas的2...

8620
来自专栏liulun

CSS旋转动画和动画的拼接

linear是匀速运动,还可以设置为: ease 默认。动画以低速开始,然后加快,在结束前变慢。 ease-in 动画以低速开始。 测...

9120
来自专栏python语言学习

css 权重值(层叠性)详解

9330
来自专栏彭湖湾的编程世界

【CSS】CSS特效集锦,视觉魔法的碰撞与融合(一)

在本文中我讲述了7种CSS的特效,它们也许看起来并不惊艳,但是我认为却足够传达本文的理念:编写一些特殊的CSS样式的时候需要不拘于常理,要用特殊的认识角度看待标...

13310
来自专栏eadela

nodejs基础-HTTP

步骤: 1,加载http模块 2.创建http服务 3、为http服务对象添加request事件处理程序 4·开启http服务监听,准备接收客户端请求 注意: ...

7620
来自专栏python语言学习

pymysql 模块简单使用

11920
来自专栏vue的实战

在项目中使用layUI

14420
来自专栏code秘密花园

多网站项目的 CSS 架构

我在互联网行业的第四份工作,是在我国一家领先的媒体新闻公司中任职一名 CSS/HTML 专家,我的主要职责就是开发可重用的、可扩展的、用于多网站的 CSS 架构...

10730
来自专栏python语言学习

css 的继承性

在面向对象语言都会存在继承的概念,在面向对象语言中,继承的特点:继承了父类的属性和方法。 那么我们现在主要研究css,css就是在设置属性的。不会牵扯到方法的层...

9310
来自专栏葡萄城控件技术团队

不用JS,教你只用纯HTML做出几个实用网页效果

在我们以往看到的页面效果中,很多效果是需要JS搭配使用的,而今天在本文中,我将介绍如何使用纯HTML打造属于自己的实用效果。

13040

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励