2017-01-24 1 views
3

Ich habe eine Animation implementiert, wo ich imageview in Recycler anzeigen, beim Klicken auf das Element, das ich einige Animationen auf dem Bild machen möchte Ansicht außerhalb der Recycler Ansicht, so dass - habe ich eine neue Imageview, - hat es zu den Hauptbehälter - hat die Animation auf sie - schließlich ich es aus dem Hauptbehälter entfernenbekomme NullPointerException: Versuch, aus Feld zu lesen 'int android.view.View.mViewFlags' - Android Animation

Hier ist der Code für das On-Click-Element der Recycler-Ansicht:

Code:

Wenn ich diese Animation auf 1 Ansicht ausführen, funktioniert es richtig. Allerdings bekomme ich den Fehler unten, wenn ich die Animation mehrmals in der gleichen Ansicht starte, und bevor einer beendet wird, wenn ich den anderen starte.

Fehlerprotokoll:

E/AndroidRuntime: FATAL EXCEPTION: main 
    Process: com.mbh.testApp, PID: 9628 
    java.lang.NullPointerException: Attempt to read from field 'int android.view.View.mViewFlags' on a null object reference 
     at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3549) 
     at android.view.View.draw(View.java:17071) 
     at android.view.View.updateDisplayListIfDirty(View.java:16050) 
     at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3748) 
     at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3728) 
     at android.view.View.updateDisplayListIfDirty(View.java:16013) 
     at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3748) 
     at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3728) 
     at android.view.View.updateDisplayListIfDirty(View.java:16013) 
     at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3748) 
     at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3728) 
     at android.view.View.updateDisplayListIfDirty(View.java:16013) 
     at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3748) 
     at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3728) 
     at android.view.View.updateDisplayListIfDirty(View.java:16013) 
     at android.view.ViewGroup.recreateChildDisplayList(ViewGroup.java:3748) 
     at android.view.ViewGroup.dispatchGetDisplayList(ViewGroup.java:3728) 
     at android.view.View.updateDisplayListIfDirty(View.java:16013) 
     at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:656) 
     at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:662) 
     at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:770) 
     at android.view.ViewRootImpl.draw(ViewRootImpl.java:2796) 
     at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2604) 
     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2211) 
     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1246) 
     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6301) 
     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:871) 
     at android.view.Choreographer.doCallbacks(Choreographer.java:683) 
     at android.view.Choreographer.doFrame(Choreographer.java:619) 
     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:857) 
     at android.os.Handler.handleCallback(Handler.java:751) 
     at android.os.Handler.dispatchMessage(Handler.java:95) 
     at android.os.Looper.loop(Looper.java:154) 
     at android.app.ActivityThread.main(ActivityThread.java:6077) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 

Ich habe versucht, Block zu setzen versuchen, Beifang, wenn der Blick aus dem Hauptbehälter zu entfernen, aber es hat nicht das Ergebnis zu ändern und immer noch die gleichen Fehler.

Ich habe auch versucht, diese Antwort https://stackoverflow.com/a/4295570/2296787 und es lösen nicht das Problem

Das seltsame ist, dass der Fehler zeigen mir tut, wo genau die Ausnahme auslöst.

Vielen Dank im Voraus für Ihre Hilfe.

+1

in Emulator es i funktioniert nicht. Run on real Gerät dann funktioniert es gut – sasikumar

+0

@sasikumar richtig! Es funktionierte gut auf einem echten Gerät! Es wurde auf dem Emulator repariert, als ich postDelayed mit 500 Millisekunden Verzögerung für das Entfernen der Ansicht verwendete! Vielen Dank – MBH

+0

Glückliche Codierung !!! – sasikumar

Antwort

2

Als @sasikumar die Lösung erwähnt wurde den Test auf reales Gerät

aber auch gelöst ich es auf dem Emulator auch durch Zugabe von postDelayed läuft mit 500 Millisekunden Verzögerung, bevor die Ansicht in der Animation Ende Hörer zu entfernen:

animatinSet.setAnimationListener(new Animation.AnimationListener() { 
    @Override 
    public void onAnimationStart(Animation animation) { 
    } 

    @Override 
    public void onAnimationEnd(Animation animation) { 
     iv.setVisibility(View.GONE); 
     v_mainContainer.postDelayed(new Runnable() { 
      @Override 
      public void run() { 
       v_mainContainer.removeView(iv); 
      } 
     }, 500); 
    } 

    @Override 
    public void onAnimationRepeat(Animation animation) { 
    } 
}); 

Dies funktioniert sowohl für Emulator und Real Devices

1

Im Emulator funktioniert es nicht. Run auf reales Gerät dann fein Es funktioniert ..

Verwandte Themen