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

来源:互联网 发布:买车团购什么软件 编辑:程序博客网 时间:2024/05/21 22:47

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文件

<?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/leibao_01"        android:duration="200"/>    <item        android:drawable="@drawable/leibao_02"        android:duration="200" />    <item        android:drawable="@drawable/leibao_03"        android:duration="200" />    <item        android:drawable="@drawable/leibao_04"        android:duration="200" />    <item        android:drawable="@drawable/leibao_05"        android:duration="200" />    <item        android:drawable="@drawable/leibao_06"        android:duration="200" />    <item        android:drawable="@drawable/leibao_07"        android:duration="200"/>        </animation-list>

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

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="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">    <ImageView        android:id="@+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" />    <Button        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="BEGIN"        android:textColor="@android:color/black"        android:layout_marginLeft="52dp"        android:layout_marginStart="52dp"        android:layout_alignParentBottom="true"        android:layout_alignParentLeft="true"        android:layout_alignParentStart="true"        android:id="@+id/begin"/>    <Button        android:id="@+id/end"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="END"        android:textColor="@android:color/black"        android:layout_marginRight="42dp"        android:layout_marginEnd="42dp"        android:layout_alignParentBottom="true"        android:layout_alignParentRight="true"        android:layout_alignParentEnd="true" /></RelativeLayout>

之后修改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;        }    }}

最后运行一下就行了

原创粉丝点击