【发布时间】:2018-10-06 22:32:38
【问题描述】:
我想在 Android 应用中显示此动画:
所以我为此创建了一个<animation-list>。它使用 46 帧,每帧由 200x200px png:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/anim_loading_ripple_frame_0" android:duration="45" />
<item android:drawable="@drawable/anim_loading_ripple_frame_1" android:duration="45" />
<item android:drawable="@drawable/anim_loading_ripple_frame_2" android:duration="45" />
<item android:drawable="@drawable/anim_loading_ripple_frame_3" android:duration="45" />
<item android:drawable="@drawable/anim_loading_ripple_frame_4" android:duration="45" />
<item android:drawable="@drawable/anim_loading_ripple_frame_5" android:duration="45" />
...
<item android:drawable="@drawable/anim_loading_ripple_frame_45" android:duration="45" />
</animation-list>
然后我将其设置为ImageView 的background 并使用
AnimationDrawable loadingAnimation =
(AnimationDrawable) loadingAnimationView.getBackground();
loadingAnimation.start();
一切都很完美,除了应用程序有时会因为OutOfMemoryException而崩溃!似乎这种动画对内存的要求很高,因为我读过其他人遇到同样的问题。
然后我想我可能只是将每个帧变成 XML shape 可绘制,所以我尝试了试验,但我不知道如何使圆圈改变大小 - 它们总是占据视图的整个宽度.
我试着做这样的事情
<item>
<shape android:shape="oval">
<padding android:top="30dp" android:right="30dp" android:bottom="30dp" android:left="30dp" />
<size
android:width="100dp"
android:height="100dp" />
<stroke
android:color="#0F0"
android:width="4dp"/>
</shape>
</item>
并且还使用layer-list 在同一个 XML 文件中定义另一个 shape,但大小不同,认为这会导致圆圈变小,但它们最终都占据了 100% 的视图。
另外,如果我在 XML 中定义帧而不是一系列 png 图像,我不确定 AnimationDrawable 是否真的会使用更少的内存?也许我仍然会遇到同样的内存使用问题?
我有什么选择?如果时间不是问题,我会尝试制作一个自定义视图,但似乎只是为了这个动画需要做很多工作。
【问题讨论】:
-
如何使用带有矢量图像的
ImageView并在ImageView本身上为成长圈使用缩放动画?在一个动画结束时,换入备用矢量图像并运行从小到大的缩放动画。
标签: android out-of-memory android-animation animationdrawable