Android动画学习之帧动画

帧动画简介

    介绍帧动画之前先了解一下‘帧’的概念:帧,影像动画中最小单位,也就是最小的单幅画面。相当于电影脚上的每一格镜头。一帧就是最小的一张单幅画面,多个帧连接在一起就会形成动画。通常所说的帧数,是指的1s时间内传输的帧的数量,也可以理解成图形处理器1s能够刷新的频率。每一帧都是一个静止的图像,快速持续的显示多个连续的帧图像便会形成运动的假象,也就是所谓的帧动画。

    帧动画是一种常见的动画形式(Frame By Frame),其原理是在“连续的关键帧”中分解动画动作,也就是在时间轴的每帧上逐帧绘制不同的内容,使其连续播放而成动画。 因为逐帧动画的帧序列内容不一样,不但给制作增加了负担而且最终输出的文件量也很大,但它的优势也很明显:逐帧动画具有非常大的灵活性,几乎可以表现任何想表现的内容,而它类似与电影的播放模式,很适合于表演细腻的动画。例如:人物或动物急剧转身、 头发及衣服的飘动、走路、说话以及精致的3D效果等等。

    简单来讲,帧动画的本质就是将很多张预先做好的具有连续性的图片在一定时间内快速持续显示出来。

帧动画实现方式

    Android中实现帧动画也很简单,主要有通过xml和代码两种方式,下面通过一个小鸟飞翔的动画demo分别介绍这两种方式。

xml方式

通过xml的方式有一下几个步骤:

1. 创建xml动画资源文件
2. 布局文件中引入动画文件
3. 代码控制动画的开始和结束
1. 创建xml动画资源文件

    帧动画的每一帧都是一张静态图片,所以完成这个demo需要多张动作连续的静态图片。准备好图片之后将图片放到Drawable文件夹中,然后在drawable文件夹中创建动画xml文件anim_test.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/test01"
        android:duration="200" />
    <item
        android:drawable="@drawable/test02"
        android:duration="200" />
    <item
        android:drawable="@drawable/test03"
        android:duration="200" />
    <item
        android:drawable="@drawable/test04"
        android:duration="200" />
    <item
        android:drawable="@drawable/test05"
        android:duration="200" />
    <item
        android:drawable="@drawable/test06"
        android:duration="200" />
    <item
        android:drawable="@drawable/test07"
        android:duration="200" />
    <item
        android:drawable="@drawable/test08"
        android:duration="200" />
</animation-list>
2. 布局文件中引入动画资源

    将imageview的背景设置成图片资源文件, 关键代码如下:

<androidx.appcompat.widget.AppCompatImageView
        android:id="@+id/iv_anim"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/anim"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"/>

3. 代码控制动画的开始和结束

    首先通过imageview获取背景资源,并且将背景资源强转成AnimationDrawable,分别调用其start和stop方法控制动画的开始和结束。关键代码如下:

final AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground();

        btn_start.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                animationDrawable.start();
            }
        });
        btn_cancel.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                animationDrawable.stop();
            }
        });

以上是通过xml的方式实现帧动画demo,接下来通过代码方式实现。

代码方式

通过代码方式实现主要有以下几个步骤:

1. 准备图片
2. 设定图片资源数组
3. 遍历图片资源数组,添加每一帧动画并设定时长
4. 设定是否循环播放
5. 将动画设置到控件背景上
6. 开启动画

核心代码如下:

public void startByCode(){
        //创建一个AnimationDrawable
        AnimationDrawable animationDrawable1 = new AnimationDrawable();
        //准备好资源图片
        int[] ids = {R.drawable.test01,R.drawable.test02,R.drawable.test03,R.drawable.test04,R.drawable.test05,R.drawable.test06,R.drawable.test07,R.drawable.test08};
        //通过for循环添加每一帧动画
        for(int i = 0 ; i < 8 ; i ++){
            Drawable frame = getResources().getDrawable(ids[i]);
            //设定时长
            animationDrawable1.addFrame(frame,200);
        }
        //是否循环播放
        animationDrawable1.setOneShot(false);
        //将动画设置到背景上
        imageView.setBackground(animationDrawable1);
        //开启帧动画
        animationDrawable1.start();
    }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android中,动画是一种通过连续播放一系列预定义的图像来模拟动画效果的技术。在动画中,每个图像都被称为一,而整个动画则由这些组成。 以下是在Android中使用动画的基本步骤: 1. 定义动画资源:在res/drawable目录下创建一个XML文件来定义动画资源。在这个文件中,你需要指定每一所对应的图像资源,并设置动画的持续时间和重复次数等属性。 2. 加载动画资源:在Activity的代码中通过调用getResources().getDrawable()方法来加载动画资源。 3. 设置动画:将加载的动画资源设置到ImageView或其他View组件中,调用setBackgroudDrawable()方法即可。 4. 启动动画:通过调用AnimationDrawable的start()方法来启动动画。 以下是一个简单的示例: 1. 定义动画资源。在res/drawable目录下创建一个名为"animation.xml"的XML文件,内容如下: ``` <animation-list android:id="@+id/selected" android:oneshot="false"> <item android:drawable="@drawable/frame1" android:duration="50" /> <item android:drawable="@drawable/frame2" android:duration="50" /> <item android:drawable="@drawable/frame3" android:duration="50" /> <item android:drawable="@drawable/frame4" android:duration="50" /> </animation-list> ``` 2. 加载动画资源。在Activity的代码中通过调用getResources().getDrawable()方法来加载动画资源。 ``` AnimationDrawable animation = (AnimationDrawable) getResources().getDrawable(R.drawable.animation); ``` 3. 设置动画。将加载的动画资源设置到ImageView或其他View组件中,调用setBackgroudDrawable()方法即可。 ``` ImageView imageView = (ImageView) findViewById(R.id.image_view); imageView.setBackgroundDrawable(animation); ``` 4. 启动动画。通过调用AnimationDrawable的start()方法来启动动画。 ``` animation.start(); ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值