现在的位置: 首页 > 综合 > 正文

android学习笔记—55_frame动画的实现,Java技术qq交流群:JavaDream:251572072

2018年04月05日 ⁄ 综合 ⁄ 共 3785字 ⁄ 字号 评论关闭

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" >
    <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;
import android.app.Activity;
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;
   }
  });
       
    }
}

抱歉!评论已关闭.