Android动画列表 - 简单示例抛出java.lang.OutOfMemoryError

时间:2016-07-18 14:37:34

标签: java c# android xamarin

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();

2 个答案:

答案 0 :(得分:2)

ANDROID_BITMAP_FORMAT_RGBA_8888格式的1280 x 1920图像:

  • 1280 x 1920 x 10 x(8位x 4(RGBA))= 786,432,000位(96MB)。

因此,对于必须在内存受限设备内存的10个drawable,至少需要96 MB。

您可能希望将这些图片转换为视频,或对其进行下采样等等。

答案 1 :(得分:1)

您在Bitmap大小中看到的200kb是压缩大小。在应用程序中绘制时,每个Bitmap占用其未压缩的大小。有关详细信息,请阅读this答案。

这个问题非常棘手,因为它出现在某些设备上而且并不在很多设备上。这取决于设备的策略以及它如何处理/释放内存。 小米手机往往面临很多这些OutOfMemoryErrors 根据我的经验,由于他们的自定义操作系统。

阅读我上面分享的答案,它可能会帮助您解决问题。