2016-12-21 2 views
0

Aktuelle Version: Android Studio 2.2.3AnimationDrawable OutOfMemoryError

ich mit der Frage, wie schaffen Sie eine Animation-Liste starten? Wenn Sie auf den Ordner res/drawable klicken neu -> Drawable Ressource-Datei haben Sie nicht die Option, das Root-Element von Selektor zu Animation-Liste zu ändern. Also ändere ich es manuell.

Nevermind, ich folgte der instructions here von developers.android.

Hier ist der Code:

res/ziehbar/anim.xml

<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
android:oneshot="true"> 
<item android:drawable="@drawable/frame13" android:duration="200" /> 
<item android:drawable="@drawable/frame14" android:duration="200" /> 
<item android:drawable="@drawable/frame15" android:duration="200" /> 
<item android:drawable="@drawable/frame16" android:duration="200" /> 
<item android:drawable="@drawable/frame17" android:duration="200" /> 
<item android:drawable="@drawable/frame18" android:duration="200" /> 
<item android:drawable="@drawable/frame19" android:duration="200" /> 
<item android:drawable="@drawable/frame20" android:duration="200" /> 
<item android:drawable="@drawable/frame21" android:duration="200" /> 
<item android:drawable="@drawable/frame22" android:duration="200" /> 
<item android:drawable="@drawable/frame23" android:duration="200" /> 
</animation-list> 

activity_main.xml

<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerVertical="true" 
    android:layout_centerHorizontal="true" 
    android:id="@+id/imageView" 
    android:src="@drawable/anim"/> 

MainActivity.java

public class MainActivity extends AppCompatActivity { 

ImageView imageView; 
AnimationDrawable a; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    imageView = (ImageView) findViewById(R.id.imageView); 
    imageView.setBackgroundResource(R.drawable.anim); 
    a = (AnimationDrawable) imageView.getBackground(); 
} 

public boolean onTouchEvent(MotionEvent event) { 
    if (event.getAction() == MotionEvent.ACTION_DOWN) { 
     a.start(); 
     return true; 
    } 
    return super.onTouchEvent(event); 
} 
} 

Sie sehen etwas falsch?

ich nicht zumindest, und wenn ich es laufen, diese Fehlermeldung erscheint:

E/AndroidRuntime: FATAL EXCEPTION: main 
       Process: animation.aggelonias.gr.animation, PID: 1146 
       java.lang.OutOfMemoryError 
        at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) 
        at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:683) 
        at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:513) 
        at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:889) 
        at android.content.res.Resources.loadDrawable(Resources.java:3077) 
        at android.content.res.Resources.getDrawable(Resources.java:1624) 
        at android.graphics.drawable.AnimationDrawable.inflate(AnimationDrawable.java:282) 
        at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:990) 
        at android.graphics.drawable.Drawable.createFromXml(Drawable.java:930) 
        at android.content.res.Resources.loadDrawable(Resources.java:3059) 
        at android.content.res.TypedArray.getDrawable(TypedArray.java:602) 
        at android.widget.ImageView.<init>(ImageView.java:133) 
        at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:60) 
        at android.support.v7.widget.AppCompatImageView.<init>(AppCompatImageView.java:56) 
        at android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:106) 
        at android.support.v7.app.AppCompatDelegateImplV9.createView(AppCompatDelegateImplV9.java:1017) 
        at android.support.v7.app.AppCompatDelegateImplV9.onCreateView(AppCompatDelegateImplV9.java:1076) 
        at android.support.v4.view.LayoutInflaterCompatHC$FactoryWrapperHC.onCreateView(LayoutInflaterCompatHC.java:44) 
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:690) 
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:761) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:498) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:398) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:354) 
        at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:284) 
        at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:143) 
        at animation.aggelonias.gr.animation.MainActivity.onCreate(MainActivity.java:17) 
        at android.app.Activity.performCreate(Activity.java:5451) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2292) 
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2386) 
        at android.app.ActivityThread.access$900(ActivityThread.java:169) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1277) 
        at android.os.Handler.dispatchMessage(Handler.java:102) 
        at android.os.Looper.loop(Looper.java:136) 
        at android.app.ActivityThread.main(ActivityThread.java:5476) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:515) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
        at dalvik.system.NativeStart.main(Native Method) 

Irgendwo in diesem Chaos sagt MainActivity.java:17: die setContentView(R.layout.activity_main);

Dank ist !

+0

Sind Sie in der Lage, nur 2 oder 3 Frames zu laden? Bitmaps essen Speicher, und das ist der Fehler –

+0

Und wie reparieren Sie es? –

+1

Es gibt viele Themen zu diesem Thema. Ich weiß jedoch nicht über Animationen. https://developer.android.com/training/building-graphics.html –

Antwort

0

Vielleicht sind Ihre Bilddateien frame13, 14, ... sehr groß oder Ihr Bildtyp wäre kein Standardbildtyp wie png, jpg. Überprüfen Sie Ihre Bilddateien.

Versuchen Sie, android: largeHeap = "true" im Manifest hinzuzufügen, um zu sehen, ob dies das Problem löst.

+0

Sie sind Frames .jpg –

+0

Versuchen Sie, Android: largeHeap = "true", in das Manifest, um zu sehen, ob dies es löst. Oder Verwenden Sie api inSampleSize von Bitmapfactory, um die Bilder zu testen. –

+0

final BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 8; –

0

AnimationDrawable werden alle Bilder in den Speicher geladen, wenn die Animation viele Bilder enthält, es Out Of Memory verursachen kann. Sie sollten also versuchen, Ihre Bitmap zu komprimieren. Eine andere Methode können Sie SurfaceView anstelle von AnimationDrawable verwenden.

View here