android学习笔记---55_frame动画的实现,Java技术qq交流群:JavaDream:251572072
Java技术qq交流群:JavaDream:251572072
2013/5/16
55_frame动画的实现
------------------------------
Android提供了2种动画:
1> Tween动画,通过对 View 的内容进行一系列的图形变换 (包括平移、缩放、旋转、改变透明度)来实现动画效果。动画效果的定义可以采用XML来做也可以采用编码来做。Tween动画有4种类型:
2> Frame动画,即顺序播放事先做好的图像,跟电影类似。开发步骤:
(1)把准备好的图片放进项目res/ drawable下。
(2)在项目的res目录下创建文件夹anim,然后在anim文件夹下面定义动画XML文件,文件名称可以自定义。当然也可以采用编码方式定义动画效果(使用AnimationDrawable类)。
(3)为View控件绑定动画效果。调用代表动画的AnimationDrawable的start()方法开始动画。
--------------------------------------------------------------------------------------------
3.注意:帧动画其实相当于web页面中的gif动画。
-----------------------------------------------
4.下面是一个帧动画的例子的所有源码
-----------------------------------
a.新建android项目:takepicture
b./frameAnimation/res/drawable
新建这个文件夹,并且在其中新建:/frameAnimation/res/drawable/frame.xml
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<!-- android:oneshot="false"这里指定是否帧动画只播放一次 ,当为false
动画会循环播放,当为true会只播放一次
android:drawable="@drawable/girl_1":指定图片的位置
android:duration="200" :指定这张图片要停留多长时间。
item用于指定图片
只要放到drawable文件夹下,就属于图形,这里是动画图形
-->
<item android:drawable="@drawable/girl_1" android:duration="200" />
<item android:drawable="@drawable/girl_2" android:duration="200" />
<item android:drawable="@drawable/girl_3" android:duration="200" />
<item android:drawable="@drawable/girl_4" android:duration="200" />
<item android:drawable="@drawable/girl_5" android:duration="200" />
<item android:drawable="@drawable/girl_6" android:duration="200" />
<item android:drawable="@drawable/girl_7" android:duration="200" />
<item android:drawable="@drawable/girl_8" android:duration="200" />
<item android:drawable="@drawable/girl_9" android:duration="200" />
<item android:drawable="@drawable/girl_10" android:duration="200" />
<item android:drawable="@drawable/girl_11" android:duration="200" />
</animation-list>
-----------------------------------------------
c./frameAnimation/res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
2013/5/16
55_frame动画的实现
------------------------------
Android提供了2种动画:
1> Tween动画,通过对 View 的内容进行一系列的图形变换 (包括平移、缩放、旋转、改变透明度)来实现动画效果。动画效果的定义可以采用XML来做也可以采用编码来做。Tween动画有4种类型:
2> Frame动画,即顺序播放事先做好的图像,跟电影类似。开发步骤:
(1)把准备好的图片放进项目res/ drawable下。
(2)在项目的res目录下创建文件夹anim,然后在anim文件夹下面定义动画XML文件,文件名称可以自定义。当然也可以采用编码方式定义动画效果(使用AnimationDrawable类)。
(3)为View控件绑定动画效果。调用代表动画的AnimationDrawable的start()方法开始动画。
--------------------------------------------------------------------------------------------
3.注意:帧动画其实相当于web页面中的gif动画。
-----------------------------------------------
4.下面是一个帧动画的例子的所有源码
-----------------------------------
a.新建android项目:takepicture
b./frameAnimation/res/drawable
新建这个文件夹,并且在其中新建:/frameAnimation/res/drawable/frame.xml
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false">
<!-- android:oneshot="false"这里指定是否帧动画只播放一次 ,当为false
动画会循环播放,当为true会只播放一次
android:drawable="@drawable/girl_1":指定图片的位置
android:duration="200" :指定这张图片要停留多长时间。
item用于指定图片
只要放到drawable文件夹下,就属于图形,这里是动画图形
-->
<item android:drawable="@drawable/girl_1" android:duration="200" />
<item android:drawable="@drawable/girl_2" android:duration="200" />
<item android:drawable="@drawable/girl_3" android:duration="200" />
<item android:drawable="@drawable/girl_4" android:duration="200" />
<item android:drawable="@drawable/girl_5" android:duration="200" />
<item android:drawable="@drawable/girl_6" android:duration="200" />
<item android:drawable="@drawable/girl_7" android:duration="200" />
<item android:drawable="@drawable/girl_8" android:duration="200" />
<item android:drawable="@drawable/girl_9" android:duration="200" />
<item android:drawable="@drawable/girl_10" android:duration="200" />
<item android:drawable="@drawable/girl_11" android:duration="200" />
</animation-list>
-----------------------------------------------
c./frameAnimation/res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/textView" />
</LinearLayout>
----------------------------------
d./frameAnimation/src/com/credream/frame/FrameAnimationActivity.java
package com.credream.frame;
----------------------------------
d./frameAnimation/src/com/credream/frame/FrameAnimationActivity.java
package com.credream.frame;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.os.MessageQueue;
import android.widget.TextView;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.os.MessageQueue;
import android.widget.TextView;
public class FrameAnimationActivity extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//1.找到这个textView
TextView textView = (TextView) this.findViewById(R.id.textView);
//2.给这个textView设置背景。
textView.setBackgroundResource(R.drawable.frame);//绑定Frame动画图形
//3.这里绑定的是drawable.frame.xml文件
final AnimationDrawable drawable = (AnimationDrawable) textView.getBackground();
// 4.drawable.start();//启动动画,在这里启动动画,是没有效果的,因为在这里绑定还没有完成
//5.动画绑定的内部实现,实际上是,当 final AnimationDrawable drawable = (AnimationDrawable) textView.getBackground();
//这里绑定完后,会发一个事件消息,到主线程的消息队列中,主线程中的消息处理器得到这个消息后会处理这个消息。
//当处理完之后才可以调用drawable.start();//启动动画,这时候调用才是有效的
//6.取到主线程中的消息处理对象。getMainLooper(),可以看到主线程就是通过looper来处理消息队列的。
//getMainLooper().myQueue()这里是当主线程处理完后才会调用handler中的回调方法addIdleHandler()
getMainLooper().myQueue().addIdleHandler(new MessageQueue.IdleHandler() {
//7.这里用匿名内部类实现
public boolean queueIdle() {
drawable.start();//启动动画
return false;
}
});
}
}
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//1.找到这个textView
TextView textView = (TextView) this.findViewById(R.id.textView);
//2.给这个textView设置背景。
textView.setBackgroundResource(R.drawable.frame);//绑定Frame动画图形
//3.这里绑定的是drawable.frame.xml文件
final AnimationDrawable drawable = (AnimationDrawable) textView.getBackground();
// 4.drawable.start();//启动动画,在这里启动动画,是没有效果的,因为在这里绑定还没有完成
//5.动画绑定的内部实现,实际上是,当 final AnimationDrawable drawable = (AnimationDrawable) textView.getBackground();
//这里绑定完后,会发一个事件消息,到主线程的消息队列中,主线程中的消息处理器得到这个消息后会处理这个消息。
//当处理完之后才可以调用drawable.start();//启动动画,这时候调用才是有效的
//6.取到主线程中的消息处理对象。getMainLooper(),可以看到主线程就是通过looper来处理消息队列的。
//getMainLooper().myQueue()这里是当主线程处理完后才会调用handler中的回调方法addIdleHandler()
getMainLooper().myQueue().addIdleHandler(new MessageQueue.IdleHandler() {
//7.这里用匿名内部类实现
public boolean queueIdle() {
drawable.start();//启动动画
return false;
}
});
}
}