Android / Xamarin中动画列表的限制是什么?
我尝试了一个简单的例子,包含10帧,每帧少于200kb,但仍然会出现Out of Memory错误。我还试过this library,但我得到了位图解码错误。
TestActivity.xaml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/myLayout"
android:clipChildren="false">
<ImageView
android:id="@+id/myAnimation"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
android:adjustViewBounds="true"
android:src="@anim/TestAnimation"
android:scaleType="centerInside" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:paddingLeft="10dp"
android:paddingRight="20dp"
android:paddingTop="170dp"
android:paddingBottom="100dp"
android:clipChildren="false"
android:clipToPadding="false">
<ImageButton
android:id="@+id/triggerAnimation"
android:layout_height="20dp"
android:layout_width="60dp"
android:background="@android:color/transparent"
android:adjustViewBounds="false"
android:src="@drawable/myButton"
android:scaleType="fitXY"
android:padding="0dp"/>
</LinearLayout>
</RelativeLayout>
TestAnimation.xml:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="true">
<item android:drawable="@drawable/test0000" android:duration="33" />
<item android:drawable="@drawable/test0001" android:duration="33" />
<item android:drawable="@drawable/test0002" android:duration="33" />
<item android:drawable="@drawable/test0003" android:duration="33" />
<item android:drawable="@drawable/test0004" android:duration="33" />
<item android:drawable="@drawable/test0005" android:duration="33" />
<item android:drawable="@drawable/test0006" android:duration="33" />
<item android:drawable="@drawable/test0007" android:duration="33" />
<item android:drawable="@drawable/test0008" android:duration="33" />
<item android:drawable="@drawable/test0009" android:duration="33" />
<item android:drawable="@drawable/test0010" android:duration="33" />
TestActivity.cs(仅显示动画触发器代码):
var imgView = FindViewById<ImageView>(Resource.Id.myAnimation);
AnimationDrawable animation = (AnimationDrawable)imgView.Drawable;
animation.Start();
答案 0 :(得分:2)
ANDROID_BITMAP_FORMAT_RGBA_8888
格式的1280 x 1920图像:
因此,对于必须在内存受限设备内存的10个drawable,至少需要96 MB。
您可能希望将这些图片转换为视频,或对其进行下采样等等。
答案 1 :(得分:1)
您在Bitmap
大小中看到的200kb是压缩大小。在应用程序中绘制时,每个Bitmap
占用其未压缩的大小。有关详细信息,请阅读this答案。
这个问题非常棘手,因为它出现在某些设备上而且并不在很多设备上。这取决于设备的策略以及它如何处理/释放内存。 小米手机往往面临很多这些OutOfMemoryErrors
根据我的经验,由于他们的自定义操作系统。
阅读我上面分享的答案,它可能会帮助您解决问题。