我的Android进阶之旅------>Android之动画之Frame Animation实例

简介: ============================首先看看官网上关于Frame animation的介绍================================ 地址:http://developer.


============================首先看看官网上关于Frame animation的介绍================================

地址:http://developer.android.com/guide/topics/resources/animation-resource.html#Frame

Frame animation

An animation defined in XML that shows a sequence of images in order (like a film).

FILE LOCATION:
res/drawable/filename.xml
The filename will be used as the resource ID.
COMPILED RESOURCE DATATYPE:
Resource pointer to an  AnimationDrawable.
RESOURCE REFERENCE:
In Java:  R.drawable.filename
In XML:  @[package:]drawable.filename
SYNTAX:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource_name"
        android:duration="integer" />
</animation-list>
ELEMENTS:
<animation-list>
Required. This must be the root element. Contains one or more  <item> elements.

attributes:

android:oneshot
Boolean. "true" if you want to perform the animation once; "false" to loop the animation.
<item>
A single frame of animation. Must be a child of a  <animation-list> element.

attributes:

android:drawable
Drawable resource. The drawable to use for this frame.
android:duration
Integer. The duration to show this frame, in milliseconds.


============================下面通过一个小案例来学习Frame animation================================

 step1:新建一个Android项目FrameAnimationDemo

step2:准备好该应用使用的图片,用来做Frame Animation的,并将动画放入drawable目录下


step3:新建一个用来描述Frame动画的xml文件,res/anim/frame.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="@drawable/p1" android:duration="500" />
	<item android:drawable="@drawable/p2" android:duration="500" />
	<item android:drawable="@drawable/p3" android:duration="500" />
	<item android:drawable="@drawable/p4" android:duration="500" />
	<item android:drawable="@drawable/p5" android:duration="500" />
	<item android:drawable="@drawable/p6" android:duration="500" />
</animation-list>


<!-- android:oneshot指示是否只运行一次,设置为false则意味着循环播放
	 <item>元素代表一帧动画,
	 android:drawable指定此帧动画所对应的图片资源, 
	 android:druation代表此帧持续的时间,整数,单位为毫秒。 
-->

step4:该应用的布局文件 res/layout/main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical" android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	
	<!-- Frame动画图片 -->
	<ImageView android:id="@+id/ImgDance" android:layout_width="fill_parent"
		android:layout_height="fill_parent" android:layout_weight="1" />
	<!-- android:layout_weight="1" 不设置该属性,下面的两个按钮会被覆盖不显示出来 -->
	
	<!-- 动画控制按钮 -->
	<Button android:layout_width="fill_parent"
		android:layout_height="wrap_content" android:text="开始跳舞"
		android:onClick="runFrame" />
	<Button android:layout_width="fill_parent"
		android:layout_height="wrap_content" android:text="结束跳舞"
		android:onClick="stopFrame" />
</LinearLayout>

step5:该应用的主文件,FrameActivity.java

package cn.oyp.frame;

import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;

public class FrameActivity extends Activity {
	// 显示动画的组件
	private ImageView imgDance;
	// Frame动画
	private AnimationDrawable animDance;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		// 实例化组件
		imgDance = (ImageView) super.findViewById(R.id.ImgDance);
	}
	
	/**
	 * 如果在onCreate()中调用AnimationDrawable的start()方法,则它只停留在第一帧,并没有出现我们期望的动画,
	 * 这是因为窗口Window对象还没有完全初始化,AnimationDrawable不能完全追加到窗口Window对象中。
	 * 而onWindowFocusChanged是在onCreate之后被调用的,当Activity展示给用户时,onWindowFocusChanged方法就会被调用, 
	 * 所以在这儿调用AnimationDrawable的start()方法可以实现动画效果。
	 */
	@Override
	public void onWindowFocusChanged(boolean hasFocus) {
		super.onWindowFocusChanged(hasFocus);
		// 将动画资源文件res/anim/frame.xml设置为ImageView的背景
		imgDance.setBackgroundResource(R.anim.frame);
		// 获取ImageView背景,此时已被编译成AnimationDrawable
		animDance = (AnimationDrawable) imgDance.getBackground();
		animDance.start();
	}

	/**
	 * 按钮:停止‘跳舞’动画
	 */
	public void stopFrame(View view) {
		animDance = (AnimationDrawable) imgDance.getBackground();
		if (animDance.isRunning()) { // 如果正在运行,就停止
			animDance.stop();
		}
	}

	/**
	 * 按钮:开始‘跳舞’动画
	 */
	public void runFrame(View view) {
		// 完全编码实现的动画效果
		animDance = new AnimationDrawable();
		for (int i = 1; i <= 6; i++) {
			// 根据资源名称和目录获取R.java中对应的资源ID
			int id = getResources().getIdentifier("p" + i, "drawable",
					getPackageName());
			// 根据资源ID获取到Drawable对象
			Drawable drawable = getResources().getDrawable(id);
			// 将此帧添加到AnimationDrawable中
			animDance.addFrame(drawable, 500);
		}
		animDance.setOneShot(false); // 设置为loop
		imgDance.setBackgroundDrawable(animDance); // 将动画设置为ImageView背景
		animDance.start(); // 开始动画
	}

}

效果如下: 


                  

                


==================================下面看一个gif动画===========================================

                          

=================================================================================================

  作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!

  转载请保留原文地址http://blog.csdn.net/ouyang_peng

==================================================================================================


相关文章
|
4月前
|
存储 Shell Android开发
基于Android P,自定义Android开机动画的方法
本文详细介绍了基于Android P系统自定义开机动画的步骤,包括动画文件结构、脚本编写、ZIP打包方法以及如何将自定义动画集成到AOSP源码中。
79 2
基于Android P,自定义Android开机动画的方法
|
2月前
|
Android开发 UED
Android 中加载 Gif 动画
【10月更文挑战第20天】加载 Gif 动画是 Android 开发中的一项重要技能。通过使用第三方库或自定义实现,可以方便地在应用中展示生动的 Gif 动画。在实际应用中,需要根据具体情况进行合理选择和优化,以确保用户体验和性能的平衡。可以通过不断的实践和探索,进一步掌握在 Android 中加载 Gif 动画的技巧和方法,为开发高质量的 Android 应用提供支持。
|
5月前
|
XML Android开发 数据格式
Android 中如何设置activity的启动动画,让它像dialog一样从底部往上出来
在 Android 中实现 Activity 的对话框式过渡动画:从底部滑入与从顶部滑出。需定义两个 XML 动画文件 `activity_slide_in.xml` 和 `activity_slide_out.xml`,分别控制 Activity 的进入与退出动画。使用 `overridePendingTransition` 方法在启动 (`startActivity`) 或结束 (`finish`) Activity 时应用这些动画。为了使前 Activity 保持静止,可定义 `no_animation.xml` 并在启动新 Activity 时仅设置新 Activity 的进入动画。
128 12
|
5月前
|
API Android开发
Android 监听Notification 被清除实例代码
Android 监听Notification 被清除实例代码
|
5月前
|
XML Android开发 UED
Android动画之共享元素动画简单实践
本文介绍Android共享元素动画, 实现两Activity间平滑过渡特定UI元素。通过设置`transitionName`属性和使用`ActivityOptions.makeSceneTransitionAnimation`启动目标Activity实现动画效果。可自定义过渡动画提升体验。
75 0
|
6月前
|
Android开发 UED
Android Item平移动画
【6月更文挑战第18天】
113 8
|
6月前
|
安全 Java Android开发
使用Unidbg进行安卓逆向实例讲解
使用Unidbg进行安卓逆向实例讲解
143 2
|
5月前
|
Android开发
android 动画 插值器和估值器
android 动画 插值器和估值器
|
5月前
|
Android开发 容器
android animation clipToPadding clipChildren
android animation clipToPadding clipChildren