Android动画之Frame Animation(逐帧动画)

Frame Animation(逐帧动画)

在Android中,动画Animation的实现有两种方式:Tween Animation(补间动画)和Frame Animation(帧动画)。渐变动画是通过对场景里的对象不断做图像变换(平移、缩放、旋转等)产生动画效果。帧动画则是通过顺序播放事先准备好的图像来产生动画效果,和电影类似。先来说说什么事Frame Animation(逐帧动画)。

逐帧动画是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。 因为逐帧动画的帧序列内容不一样,不但给制作增加了负担而且最终输出的文件量也很大,但它的优势也很明显:逐帧动画具有非常大的灵活性,几乎可以表现任何想表现的内容,而它类似与电影的播放模式,很适合于表演细腻的动画。

需要AnimationDrawable定义好的其他的一些方法来操作逐帧动画,下面简单介绍一下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的res/drawble下放置一系列用到的图并创建animlist.xml文件

"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"
    android:oneshot="false">

    "@drawable/leibao_01"
        android:duration="200"/>
    "@drawable/leibao_02"
        android:duration="200" />
    "@drawable/leibao_03"
        android:duration="200" />
    "@drawable/leibao_04"
        android:duration="200" />
    "@drawable/leibao_05"
        android:duration="200" />
    "@drawable/leibao_06"
        android:duration="200" />
    "@drawable/leibao_07"
        android:duration="200"/>
        

然后设置图片显示的布局文件

"1.0" encoding="utf-8"?>
"http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:background="@android:color/white"
    tools:context="com.example.admin.frameanimation.AnimationActivity">
    "@+id/animation_iv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:src="@drawable/animlist" />

    

之后修改AnimationActivity.java中的内容


package com.example.admin.frameanimation;  
import android.os.Bundle;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;

public class AnimationActivity extends Activity implements OnClickListener {
    private ImageView imageView;
    private Button btnStart, btnStop;
    private AnimationDrawable animationDrawable;

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

        intiView();

        initData();
    }

    /**
     *初始化组件
     */
    private void intiView() {
        imageView = (ImageView) findViewById(R.id.animation_iv);
        btnStart = (Button) findViewById(R.id.begin);
        btnStop = (Button) findViewById(R.id.end);
    }

    /**
     *初始化数据
     */
    private void initData() {
        btnStart.setOnClickListener(this);
        btnStop.setOnClickListener(this);
        //Sets a drawable as the content of this ImageView.
        imageView.setImageResource(R.drawable.animlist);
        //给动画资源赋值
        animationDrawable = (AnimationDrawable) imageView.getDrawable();
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.begin:
                animationDrawable.start();//开始
                break;

            case R.id.end:
                animationDrawable.stop(); //停止
                break;

        }
    }
}

最后运行一下就行了

你可能感兴趣的:(Android动画之Frame Animation(逐帧动画))