首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android动画-Drawable Animation(帧动画)

Android动画-Drawable Animation(帧动画)

作者头像
码客说
发布2019-10-22 14:08:37
8600
发布2019-10-22 14:08:37
举报
文章被收录于专栏:码客码客

文章导航

概述

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)中启动动画。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2015-04-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章导航
  • 概述
    • 动画定义
      • 动画调用
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档