2013-02-12 68 views
1

下面是我在做什麼安卓:imageView.setImageResource(AnimationDrawable)會導致內存不足的錯誤

ImageView image2 = (ImageView) findViewById(R.id.imageView3); 
image2.getDrawable().setCallback(null); 
image2.setImageResource(R.drawable.fire); 

,其中火是一個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/fire1" android:duration="50" /> 
<item android:drawable="@drawable/fire2" android:duration="50" /> 
<item android:drawable="@drawable/fire3" android:duration="50" /> 
<item android:drawable="@drawable/fire4" android:duration="50" /> 
<item android:drawable="@drawable/fire5" android:duration="50" /> 
... 
<item android:drawable="@drawable/fire16" android:duration="50" /> 

我有此錯誤

02-12 11:37:20.919: E/dalvikvm-heap(3193): 1535664-byte external allocation too large for this process. 
02-12 11:37:20.959: E/GraphicsJNI(3193): VM won't let us allocate 1535664 bytes 
02-12 11:37:20.959: W/dalvikvm(3193): threadid=1: thread exiting with uncaught exception (group=0x40018560) 
02-12 11:37:20.979: E/AndroidRuntime(3193): FATAL EXCEPTION: main 
02-12 11:37:20.979: E/AndroidRuntime(3193): java.lang.OutOfMemoryError: bitmap size exceeds VM budget 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:460) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:336) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:697) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.content.res.Resources.loadDrawable(Resources.java:1709) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.content.res.Resources.getDrawable(Resources.java:581) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.graphics.drawable.AnimationDrawable.inflate(AnimationDrawable.java:267) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:787) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.content.res.Resources.loadDrawable(Resources.java:1694) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.content.res.Resources.getDrawable(Resources.java:581) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.widget.ImageView.resolveUri(ImageView.java:501) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.widget.ImageView.setImageResource(ImageView.java:280) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at com.example.kersplatt.GameActivity.onCreate(GameActivity.java:71) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.os.Handler.dispatchMessage(Handler.java:99) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.os.Looper.loop(Looper.java:130) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at java.lang.reflect.Method.invokeNative(Native Method) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at java.lang.reflect.Method.invoke(Method.java:507) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:875) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:633) 
02-12 11:37:20.979: E/AndroidRuntime(3193):  at dalvik.system.NativeStart.main(Native Method) 

我讀到內存泄露,內存錯誤(例如java.lang.OutOfMemoryError: bitmap size exceeds VM budget - Android)這麼多線程,但是當我通過image2.setImageResource(R.drawable.fire1);其中FIRE1是一個簡單的PNG remplace image2.setImageResource(R.drawable.fire);我並沒有解決我的問題

成功,一切正常 有什麼事情我確實解決了我的問題

+1

要動畫視圖,你應該使用「FrameAnimation」,其中所有項目添加爲幀並將該動畫添加到ImageView。 – 2013-02-12 12:19:47

+0

我可以做些什麼,以便我添加的圖像(使用addFrame)具有與最初在imageview中的圖像相同的尺寸。當我做image2.getLayoutParams()。height = FrameLayout.LayoutParams.WRAP_CONTENT; image2.getLayoutParams()。width = FrameLayout.LayoutParams.FILL_PARENT; (imageview的初始條件)它不起作用 – morg 2013-02-12 14:43:37

+0

好吧我調整大小使用fireAnimation.addFrame(新的BitmapDrawable(decodeSampledBitmapFromResource(getResources(),R.drawable.fire1,200,200)),50);從你給的東西,它工作謝謝! – morg 2013-02-12 16:29:47

回答

相關問題