Android 动画总结(2) - 帧动画

Android 动画总结(1) - 概述
Android 动画总结(3) - 补间动画
Android 动画总结(4) - 插值器
Android 动画总结(5) - 属性动画
Android 动画总结(6) - 估值器
Android 动画总结(7) - ViewGroup 子元素间的动画
Android 动画总结(8) - Activity 转场动画
Android 动画总结(9) - 过渡动画


Frame Animation,也叫 Drawable Animation,原理就类似视频快速播放一帧一帧的图片。一般场景下很少使用,工作中遇到的是有时会有背景色,用若干颜色值变化,有时一个 View 要弹跳,其实是做好了若干切图,图片大小一致,但里面的内容处于不同位置,然后播放起来看着好像是在弹跳。

如果真的有用大图,需要防止 OOM 问题。

xml 方式

res/anim 目录创建动画 xml 文件。其中一个 代表一帧。



    
    
    
    
    
    
    
    
    
    
    
    

如果是颜色值,要在 colors.xml 中定义好,直接在 android:drawable 处使用 #FFFFFF 这种十六进制颜色值会报错



    #FF3030
    #FF4500
    #FF6EB4
    #FF7F50
    #FF8C00
    #FFA54F
    #FFB90F
    #FFC1C1
    #FFDEAD
    #FFE4E1
    #FFEFD5
    #FFF68F

其中 android:oneshot 用于控制动画是否循环播放,为 true 只播放一次并停留在最后一帧,默认是 false,循环播放的。

然后代码控制播放,实际运行发现既可以作为 Background 也可以作为 Resource,都可以启动动画。

// 作为 Background
image.backgroundResource = R.drawable.test // 设置背景资源
// or
// image.backgroundDrawable = resources.getDrawable(R.drawable.frame_drawable_test)
// getBackground() 取得 AnimationDrawable 对象
val animDrawable : AnimationDrawable = image.background as AnimationDrawable
// 启动动画
animDrawable.start()

// 作为 Resource
image.imageResource = R.drawable.frame_drawable_test
// getDrawable() 取得 AnimationDrawable 对象
val animDrawable2 : AnimationDrawable = image.drawable as AnimationDrawable
animDrawable.stop() // 停止动画
animDrawable2.start()       

代码方式

val animDrawable = AnimationDrawable()
animDrawable.isOneShot = true
(1..12).map {
    val id = resources.getIdentifier("color" + it, "color", packageName)
    animDrawable.addFrame(resources.getDrawable(id), 200) // 添加一帧,播放时长 200 ms
}
// 作为 Resource
image.setImageDrawable(animDrawable)
// 作为 Background
// image.backgroundDrawable = animDrawable
// image.background = animDrawable
animDrawable.start()

效果如下:

Android 动画总结(2) - 帧动画_第1张图片
帧动画

你可能感兴趣的:(Android 动画总结(2) - 帧动画)