Android 两种方式实现帧动画

一、逐帧动画

帧动画(Frame Animation)是一种在一定时间内按顺序播放一系列图像帧(每一帧都是一个单独的图像),从而产生连续运动或变化的动画效果。

二、实现方式

1. AnimationDrawable XML方式

基本原理

  • 帧定义: 创建一个包含所有帧的XML文件,其中每一帧是一个 <item> 元素,指定了相应的图像和显示时间。
  • AnimationDrawable: 使用 AnimationDrawable 类,将帧定义文件设置为它的背景,并控制动画的启动和停止。

步骤

  • 创建帧动画 XML 文件:res/drawable 目录下创建一个 XML 文件,定义每一帧的图像和显示时间。例如,创建一个名为 animation_list.xml 文件:

这里的图片资源可以自己随便找几张

xml 复制代码
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/frame_1" android:duration="100"/>
    <item android:drawable="@drawable/frame_2" android:duration="100"/>
    <item android:drawable="@drawable/frame_3" android:duration="100"/>
</animation-list>
  • 在布局文件中添加 ImageView: 在你的布局文件中添加一个 ImageView,并设置其 src 属性为帧动画的 XML 文件:
xml 复制代码
<ImageView
    android:layout_gravity="center"
    android:id="@+id/animationImageView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/anim_frame" />
  • 在代码中启动动画: 在mainactivity中,通过 AnimationDrawable 启动帧动画:
java 复制代码
ImageView imageView = findViewById(R.id.animationImageView);
imageView.setBackgroundResource(R.drawable.animation_list);
AnimationDrawable animationDrawable = (AnimationDrawable) imageView.getBackground();
animationDrawable.start();

2.直接使用代码创建

在代码中动态创建AnimationDrawable对象,并添加每一帧。这种方式适用于需要动态控制帧的情况。

java 复制代码
AnimationDrawable animationDrawable = new AnimationDrawable();
animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame_1), 100);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame_2), 100);
animationDrawable.addFrame(getResources().getDrawable(R.drawable.frame_3), 100);
// 添加更多帧...

ImageView imageView = findViewById(R.id.animationImageView);
imageView.setImageDrawable(animationDrawable);
animationDrawable.start();

三、总结

使用场景:

帧动画适用于一些简单的、循环播放的动画场景,例如:

  1. 加载指示器: 帧动画可以用于创建加载过程中的循环动画,如旋转的加载指示器。
  2. 小动画效果: 适合创建一些简单的动画效果。
  3. 游戏中的简单动画: 对于一些简单的游戏场景,帧动画也可以派上用场。

优点:

  1. 简单易用: 帧动画的实现相对简单,不需要太多的代码。
  2. 轻量级: 对于一些小型的动画效果,帧动画在性能上通常是比较轻量级的。
  3. 无需额外资源: 不需要使用额外的库或依赖,直接使用Android SDK提供的 AnimationDrawable 就可以实现。

缺点:

  1. 资源消耗: 如果帧动画包含的帧数较多,会占用较多内存,可能对性能产生一定影响。
  2. 限制性: 帧动画对于复杂的动画效果、交互性的需求较为有限,不太适用于需要更高程度控制的场景。
  3. 不适合大图: 如果每一帧的图片尺寸较大,可能会导致内存占用较高,不适用于大图的动画。

总之,

帧动画适用于一些简单、小型、循环播放的动画效果,对于性能要求不太高的场景比较合适。但在需要更复杂、交互性强、性能要求高的场景,可能需要考虑使用属性动画、Lottie等更灵活的动画方案。选择合适的动画方案取决于具体的项目需求和性能优化的考虑。

相关推荐
雨白1 小时前
Jetpack系列(二):Lifecycle与LiveData结合,打造响应式UI
android·android jetpack
kk爱闹3 小时前
【挑战14天学完python和pytorch】- day01
android·pytorch·python
每次的天空5 小时前
Android-自定义View的实战学习总结
android·学习·kotlin·音视频
恋猫de小郭5 小时前
Flutter Widget Preview 功能已合并到 master,提前在体验毛坯的预览支持
android·flutter·ios
断剑重铸之日6 小时前
Android自定义相机开发(类似OCR扫描相机)
android
随心最为安6 小时前
Android Library Maven 发布完整流程指南
android
岁月玲珑6 小时前
【使用Android Studio调试手机app时候手机老掉线问题】
android·ide·android studio
还鮟10 小时前
CTF Web的数组巧用
android
小蜜蜂嗡嗡12 小时前
Android Studio flutter项目运行、打包时间太长
android·flutter·android studio
aqi0012 小时前
FFmpeg开发笔记(七十一)使用国产的QPlayer2实现双播放器观看视频
android·ffmpeg·音视频·流媒体