欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

逐帧动画(Frame Animation)

程序员文章站 2022-03-16 15:13:17
...

   逐帧动画也叫Drawable Animation,是最简单最直观的动画类型,它利用人眼的视觉暂留效应(也就是光对视网膜所产生的视觉),在光停止作用后,仍然会保留一段事件的现象。
    在Android中实现逐帧动画,就是由设计师给出一系列状态不断变化的图片,开发者可以指定动画中每一帧对应的图片和持续事件,然后就可以开始播放动画,具体有两种方式可以定义逐帧动画,分别是采用XML资源文件和代码实现。

1. XML资源文件方式

   这是最常用的方式,首先我们将每一帧的图片放到res/drawable目录中,然后在res/anim目录中新建一个动画XML文件,在这个文件中使用<animation-list>标签来定义动画帧序列,使用<item>标签来定义动画的每一帧,并在其中指定帧的持续时间等属性:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/shuibo0000" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0001" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0002" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0003" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0004" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0005" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0006" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0007" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0008" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0009" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0010" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0011" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0012" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0013" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0014" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0015" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0016" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0017" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0018" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0019" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0020" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0021" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0022" android:duration="120"/>
    <item android:drawable="@drawable/shuibo0023" android:duration="120"/>
</animation-list>
 <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:srcCompat="@drawable/shuibowen_animtaion" />
val animationDrawable = imageView.drawable as AnimationDrawable
        if(!animationDrawable.isRunning){
            animationDrawable.start()
        }

2.代码方式

   在代码中定义逐帧动画也很简单,但不常用:

   val animationDrawable = AnimationDrawable()
        for (i in 0 until 24) {
            val identifier = resources.getIdentifier(
                if (i - 10 < 0) {
                    "shuibo000$i"
                } else "shuibo00$i", "drawable", packageName
            )
            val drawable = resources.getDrawable(identifier)
            animationDrawable.addFrame(drawable, 120)
        }
        imageView.setImageDrawable(animationDrawable)
        animationDrawable.isOneShot = false
        animationDrawable.start()

逐帧动画(Frame Animation)

相关标签: Android高级进阶