码迷,mamicode.com
首页 > 移动开发 > 详细

Android笔记(六十三) android中的动画——逐帧动画( frame-by-frame animation)

时间:2015-12-22 19:27:20      阅读:200      评论:0      收藏:0      [点我收藏+]

标签:

      就好像演电影一样,播放实现准备好的图片,来实现动画效果。

      逐帧动画需要用到AnimationDrawable类,该类主要用于创建一个逐帧动画,然后我们把这个动画设置为view的背景即可。

      android提供两种方法为AnimationDrawable添加帧:XML定义和JAVA代码创建。

XML

      因为动画帧的资源需要是一个Drawable对象,所以需要把它放到Drawable目录下。在<animation-list>使用<item>来添加一帧

anima.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/a"
        android:duration="100"/>
    <item
        android:drawable="@drawable/b"
        android:duration="100"/>
    <item
        android:drawable="@drawable/c"
        android:duration="100"/>
    <item
        android:drawable="@drawable/d"
        android:duration="100"/>
    <item
        android:drawable="@drawable/e"
        android:duration="100"/>

</animation-list>

MainActivity.java

package cn.lixyz.animator;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.widget.ImageView;

@SuppressLint("NewApi")
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ImageView iv = (ImageView) findViewById(R.id.image);
        AnimationDrawable ad = new AnimationDrawable();
        ad = (AnimationDrawable) getResources().getDrawable(R.drawable.anima);
        iv.setBackground(ad);
        ad.start();

    }
}

 

JAVA

      在Android中,除了可以通过XML文件定义一个逐帧动画之外,还可以通过AnimationDrawable.addFrame()方法为AnimationDrawable添加动画帧

package cn.lixyz.animator;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.widget.ImageView;

@SuppressLint("NewApi")
public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ImageView iv = (ImageView) findViewById(R.id.image);
        AnimationDrawable ad = new AnimationDrawable();
        ad.addFrame(getResources().getDrawable(R.drawable.a), 500);
        ad.addFrame(getResources().getDrawable(R.drawable.b), 500);
        ad.addFrame(getResources().getDrawable(R.drawable.c), 500);
        ad.addFrame(getResources().getDrawable(R.drawable.d), 500);
        ad.addFrame(getResources().getDrawable(R.drawable.e), 500);

        ad.setOneShot(false);

        iv.setBackground(ad);
        ad.start();


    }
}

      

常用方法

      AnimationDrawable还有一些其他的方法:

      void start():开始播放逐帧动画。

      void stop():停止播放逐帧动画。

      void addFrame(Drawable frame,int duration):为AnimationDrawable添加一帧,并设置持续时间。

      int getDuration(int i):得到指定index的帧的持续时间。

      Drawable getFrame(int index):得到指定index的帧Drawable。

      int getNumberOfFrames():得到当前AnimationDrawable的所有帧数量。

      boolean isOneShot():当前AnimationDrawable是否执行一次,返回true执行一次,false循环播放。

      boolean isRunning():当前AnimationDrawable是否正在播放。

      void setOneShot(boolean oneShot):设置AnimationDrawable是否执行一次,true执行一次,false循环播放

Android笔记(六十三) android中的动画——逐帧动画( frame-by-frame animation)

标签:

原文地址:http://www.cnblogs.com/xs104/p/5067430.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!