美文网首页Android开发Android开发经验谈Android开发
Android动画技术点总结(二)——逐帧动画

Android动画技术点总结(二)——逐帧动画

作者: 剑小河 | 来源:发表于2018-11-16 14:48 被阅读8次

快捷链接:
Android动画技术点总结(一)——View动画

2.逐帧动画

逐帧动画就像是GIF,快速更换图片,主要有AnimationDrawable完成,用起来比较简单,所以扩展性不强,讲一下AnimationDrawable就好了。
例子,素材图是我把一个GIF的每一帧图片拆出来的


frame.gif

原GIF(如有侵权,敬请告知,立刻删除)


原GIF.gif(如有侵权,敬请告知,立刻删除)

2.1 使用

素材
素材.png
代码

在drawable目录下创建animation-list标签的文件


<!--frame_anim.xml-->
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/frame_00" android:duration="90" />
    <item android:drawable="@drawable/frame_01" android:duration="90" />
    <item android:drawable="@drawable/frame_02" android:duration="90" />
    <item android:drawable="@drawable/frame_03" android:duration="90" />
    <item android:drawable="@drawable/frame_04" android:duration="90" />
    <item android:drawable="@drawable/frame_05" android:duration="90" />
    <item android:drawable="@drawable/frame_06" android:duration="90" />
    <item android:drawable="@drawable/frame_07" android:duration="90" />
    <item android:drawable="@drawable/frame_08" android:duration="90" />
    <item android:drawable="@drawable/frame_09" android:duration="90" />
    <item android:drawable="@drawable/frame_10" android:duration="90" />
    <item android:drawable="@drawable/frame_11" android:duration="90" />
    <item android:drawable="@drawable/frame_12" android:duration="90" />
    <item android:drawable="@drawable/frame_13" android:duration="90" />
</animation-list>

在Java代码中使用即可


ImageView image = findViewById(R.id.image);
image.setImageResource(R.drawable.frame_anim);

AnimationDrawable drawable = (AnimationDrawable) image.getDrawable();
drawable.start();

纯Java也可以实现


ImageView image = findViewById(R.id.image);

int[] resIds = new int[]{
        R.drawable.frame_00,
        R.drawable.frame_01,
        R.drawable.frame_02,
        R.drawable.frame_03,
        R.drawable.frame_04,
        R.drawable.frame_05,
        R.drawable.frame_06,
        R.drawable.frame_07,
        R.drawable.frame_08,
        R.drawable.frame_09,
        R.drawable.frame_10,
        R.drawable.frame_11,
        R.drawable.frame_12,
        R.drawable.frame_13,
};

AnimationDrawable animationDrawable = new AnimationDrawable();
Resources resources = getResources();
for (int resId : resIds) {
    animationDrawable.addFrame(resources.getDrawable(resId), 90);
}
image.setImageDrawable(animationDrawable);
animationDrawable.start();

还是使用xml方便一些。

属性
xml Java方法 参数 描述
android:drawable addFrame第一个参数 xml为drawable资源,java参数为Drawable对象 动画每一帧的资源文件
android:duration addFrame第二个参数 int 当前帧持续时间
android:oneshot setOneShot boolean,默认为false 如果为true,则动画将仅运行一次然后停止
内存开销问题

几乎所有关于朱桢动画的文章都会提及OOM问题,下面的截图是关于我这个例子内存变化。

内存变化.png

可以看到动画播放前后,内存开销突然增加了38.20MB - 30.02MB = 8.18MB,且增加的基本都是Graphics(图像缓存等,包括GL surfaces, GL textures等)。所以使用逐帧动画的时候,还是量力而行,尽量不要使用太大的图片。

快捷链接:
Android动画技术点总结(一)——View动画

相关文章

  • Android动画技术点总结(一)——View动画

    快捷链接:Android动画技术点总结(二)——逐帧动画 一般来说,Android常用动画有三种,View动画、逐...

  • Android动画技术点总结(二)——逐帧动画

    快捷链接:Android动画技术点总结(一)——View动画 2.逐帧动画 逐帧动画就像是GIF,快速更换图片,主...

  • Android动画技术分析

    本文将介绍Android动画的实现技术。Android动画实现有三种技术,逐帧动画(Drawable Animat...

  • Android 动画锦集

    Android 动画可分为逐帧动画、补间动画、属性动画。使用传统的逐帧动画、补间动画可以实现 Android 基本...

  • Android 动画总结

    Android 中的动画可以分为以下几类: 逐帧动画 补间动画 属性动画 一、逐帧动画 逐帧动画的原理就是让一系列...

  • 安卓动画

    Android 中的动画可以分为以下几类: 逐帧动画 补间动画 属性动画 1、逐帧动画 逐帧动画的原理就是让一系列...

  • Android动画

    文章脑图 1、Android动画种类 逐帧动画、补间动画、属性动画 逐帧动画 逐帧动画的原理就是让一系列的静态图片...

  • Android 动画总结(9) - 过渡动画

    Android 动画总结(1) - 概述Android 动画总结(2) - 帧动画Android 动画总结(3) ...

  • Android 动画总结(3) - 补间动画

    Android 动画总结(1) - 概述Android 动画总结(2) - 帧动画Android 动画总结(4) ...

  • Android 动画总结(4) - 插值器

    Android 动画总结(1) - 概述Android 动画总结(2) - 帧动画Android 动画总结(3) ...

网友评论

    本文标题:Android动画技术点总结(二)——逐帧动画

    本文链接:https://www.haomeiwen.com/subject/zkojfqtx.html