2016-07-25 14 views
1

Ich habe über stackoverflow und keine Frage war in der Lage, mein Problem zu lösen.ungültiges Zeichen animierte-animierte-Vektor

Ich versuche, einen animierte Vektor ziehbar auf einem Gerät mit API 15 zu spielen, aber ich erhalte die folgende Laufzeitausnahme erhalten:

com.karim.test E/AvdcInflateDelegate: Exception while inflating <animated-vector> 
android.content.res.Resources$NotFoundException: File res/drawable-ldpi-v4/feedback.png from xml type xml resource ID #0x7f020066 
at android.content.res.Resources.loadXmlResourceParser(Resources.java:2152) 
at android.content.res.Resources.loadXmlResourceParser(Resources.java:2107) 
at android.content.res.Resources.getXml(Resources.java:906) 
at android.support.graphics.drawable.VectorDrawableCompat.create(VectorDrawableCompat.java:408) 
at android.support.graphics.drawable.AnimatedVectorDrawableCompat.inflate(AnimatedVectorDrawableCompat.java:356) 
at android.support.graphics.drawable.AnimatedVectorDrawableCompat.createFromXmlInner(AnimatedVectorDrawableCompat.java:162) 
at android.support.v7.widget.AppCompatDrawableManager$AvdcInflateDelegate.createFromXmlInner(AppCompatDrawableManager.java:905) 
at android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates(AppCompatDrawableManager.java:356) 
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:197) 
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:192) 
at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:66) 
at android.support.v7.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:71) 
at com.karim.test.MainActivity.initialize(MainActivity.java:428) 
at com.karim.test.MainActivity.onCreate(MainActivity.java:210) 
    Caused by: java.io.FileNotFoundException: Corrupt XML binary file 
at android.content.res.AssetManager.openXmlAssetNative(Native Method) 
at android.content.res.AssetManager.openXmlBlockAsset(AssetManager.java:487) 
at android.content.res.Resources.loadXmlResourceParser(Resources.java:2134) 
at android.content.res.Resources.loadXmlResourceParser(Resources.java:2107) 
at android.content.res.Resources.getXml(Resources.java:906) 
at android.support.graphics.drawable.VectorDrawableCompat.create(VectorDrawableCompat.java:408) 
at android.support.graphics.drawable.AnimatedVectorDrawableCompat.inflate(AnimatedVectorDrawableCompat.java:356) 
at android.support.graphics.drawable.AnimatedVectorDrawableCompat.createFromXmlInner(AnimatedVectorDrawableCompat.java:162) 
at android.support.v7.widget.AppCompatDrawableManager$AvdcInflateDelegate.createFromXmlInner(AppCompatDrawableManager.java:905) 
at android.support.v7.widget.AppCompatDrawableManager.loadDrawableFromDelegates(AppCompatDrawableManager.java:356) 
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:197) 
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:192) 
at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:66) 
at android.support.v7.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:71) 
at com.karim.test.MainActivity.initialize(MainActivity.java:428) 
at com.karim.test.MainActivity.onCreate(MainActivity.java:210) 

    android.content.res.Resources$NotFoundException: File res/drawable/animated_feedback_left.xml from drawable resource ID #0x7f020065 
at android.content.res.Resources.loadDrawable(Resources.java:1923) 
at android.content.res.Resources.getDrawable(Resources.java:664) 
at android.support.v7.widget.ResourcesWrapper.getDrawable(ResourcesWrapper.java:128) 
at android.support.v7.widget.TintResources.getDrawable(TintResources.java:45) 
at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:323) 
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:201) 
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:191) 
at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:66) 
at android.support.v7.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:71) 
at com.karim.test.MainActivity.initialize(MainActivity.java:422) 
at com.karim.test.MainActivity.onCreate(MainActivity.java:204) 

    Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #2: invalid drawable tag animated-vector 
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:863) 
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:804) 
at android.content.res.Resources.loadDrawable(Resources.java:1920) 
at android.content.res.Resources.getDrawable(Resources.java:664) 
at android.support.v7.widget.ResourcesWrapper.getDrawable(ResourcesWrapper.java:128) 
at android.support.v7.widget.TintResources.getDrawable(TintResources.java:45) 
at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:323) 
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:201) 
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:191) 
at android.support.v7.widget.AppCompatImageHelper.setImageResource(AppCompatImageHelper.java:66) 
at android.support.v7.widget.AppCompatImageView.setImageResource(AppCompatImageView.java:71) 
at com.karim.test.MainActivity.initialize(MainActivity.java:422) 
at com.karim.test.MainActivity.onCreate(MainActivity.java:204) 


ich die gleichen Ressourcen aus meiner vorherigen Frage, die Sie kann hier finden Animated Vector Drawable not working with API 15

Auch ich habe statt ImageView getestet, um AppCompatImageView aber immer noch den gleichen Fehler zu verwenden.

Ich habe das Debuggen dieser Fehler und es nicht auf die folgende Erklärung ab:

final XmlPullParser parser = res.getXml(resId); 

innen:

public static VectorDrawableCompat create(@NonNull Resources res, @DrawableRes int resId, @Nullable Theme theme) 

Methode von VectorDrawableCompat verion 23.3.0.

Es scheint, dass ich ein Problem mit der Kompatibilität habe. Irgendwann entscheidet sich Android, das XML-Parsing von API 15 anstelle der compat-Version zu verwenden. Irgendwelche Ideen, wie ich dieses lästige Problem lösen kann?

Update: Ich folgte Chris Banes Blog und immer noch kein Glück. Im Grunde habe ich die compat Bibliotheken 23.4.0 aktualisiert und ich verwendet, um die folgenden in meiner Tätigkeit:

static { 
    AppCompatDelegate.setCompatVectorFromSourcesEnabled(true); 
} 
+0

Das Ding, das mir in deinem Fehler auffällt, ist "feedback.png". Das deutet darauf hin, dass Android Studio das VectorDrawable in ein .png umwandelt, das dann den Fehler verursacht (kann ein PNG nicht animieren!). In Ihrer vorherigen Frage hatten Sie die entsprechende Zeile in Ihrer Gradle-Datei, um diese Konvertierung zu stoppen (vectorDrawables.useSupportLibrary = true). stellen Sie sicher, dass es immer noch vorhanden ist und nicht versehentlich entfernt wurde. Versuchen Sie auch, Clean and Rebuild in Ihrem Projekt auszuführen, um automatisch generierte Dateien zu löschen. –

+0

danke @LewisMcGeary für den Kommentar. Es funktionierte, nachdem ich meinen Kopf einen ganzen Tag lang geschlagen hatte und bevor ich aufgab. Also hatte ich alle meine Ressourcen in einem Modul, das mit der Haupt-App verbunden ist. Als ich die animationsbezogenen XMLs zurück in die Haupt-App verschoben habe, funktionierte das Laden gut und ich konnte die Animation abspielen. Ich versuche immer noch, Sinn zu machen, denn warum sollte es funktionieren, wenn ich die Ressourcen in der Haupt-App habe und nicht Teil eines Moduls bin. Werde ein Update veröffentlichen, sobald ich eine Antwort habe. –

+0

Seltsam, aber zumindest funktioniert es! Ich habe Leute gesehen, die über Probleme berichten, die daraus resultieren, dass eine Ressource in ihrer App denselben Namen wie eine Ressource in einer Bibliothek hat. Nicht sicher, ob es verwandt ist, aber wenn du es ausarbeitest, teile es! –

Antwort

0

API 16 animation
Inflating Drawable des

`VectorDrawable` und `AnimatedVectorDrawable` in diesem Support-Bibliothek aufgeblasen werden kann, in auf diese Weise:

  • Aufruf statisch getDrawable() Methoden:
//This will only inflate a drawable with <vector> as the root element 
VectorDrawable.getDrawable(context, R.drawable.ic_arrow_vector); 

//This will only inflate a drawable with <animated-vector> as the root element 
AnimatedVectorDrawable.getDrawable(context, R.drawable.ic_arrow_to_menu_animated_vector); 

// This will inflate any drawable and will auto-fallback to the lollipop implementation on api 21+ devices 
ResourcesCompat.getDrawable(context, R.drawable.any_drawable);

Wenn die Auslosungs in Java-Code aufblasen, empfiehlt es sich immer ResourcesCompat.getDrawable() zu verwenden, da diese Lollipop wenn anwendbar Rückfall behandelt. Dadurch kann das System Drawable ConstantState zwischenspeichern und ist daher effizienter.
Die Bibliothek hat folgenden Morph (bi-direktional) Animationen:

  • Wiedergabe-Pause Morph-Animation
  • Wiedergabe-Stopp-Morph-Animation
  • Pfeil-Hamburger-Menü Morph-Animation

  • Wie können Sie siehe, ich produzierte das obere Bild auf meinem API 16 Telefon:

    import com.wnafee.vector.compat.AnimatedVectorDrawable; 
    mdrawable = (AnimatedVectorDrawable) AnimatedVectorDrawable.getDrawable(this.getApplicationContext(), R.drawable.consolidated_animated_vector); 
    

    Blick auf den GitHub README für vector-compat hier: https://github.com/wnafee/vector-compat
    Dies wird Ihr Problem beheben (bis API 14), wenn Sie es mit Ihrer App Moduls build.gradledependencies (in der Regel am Ende der Datei) fusionieren:

    dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    //Trying to FIX Binary XML file line #2: invalid drawable tag animated-vector 
        compile 'com.android.support:appcompat-v7:25.0.0' 
        compile 'com.android.support:design:25.0.0' 
    //not needed 
    // compile 'com.android.support:support-vector-drawable:25.0.0' 
        compile 'com.wnafee:vector-compat:1.0.5'//*******holy grail *******https://github.com/wnafee/vector-compat 
    // Failed to resolve: com.android.support:support-animated-vector-drawable:25.0.0 
    //not needed 
    // compile 'com.android.support:support-animated-vector-drawable:25.0.0' 
    } 
    
    1

    Es gibt Support-Bibliothek 25.4.0 und es soll alle unsere Probleme lösen. Zum Beispiel unterstützt es endlich Pfad-Morphing!

    es hinzufügen zu benutzen:

    allprojects { 
        repositories { 
         maven { 
          url "https://maven.google.com" 
         } 
        } 
    } 
    

    in Ihrem Projekt gradle-Datei, und dementsprechend Abhängigkeit selbst:

    compile 'com.android.support:support-v4:25.4.0' 
    

    Danach Sie Vektor ziehbar Animation mit Pfad Morphing (die oft das ist verwenden können Täter hinter "ungültiger Zeichen-animierter-animierter-Vektor") in der folgenden Weise (ein kleiner Kotlin-Code):

    val drawable = AnimatedVectorDrawableCompat.create(this, R.drawable.vector_drawable) 
    imageView.setImageDrawable(drawable) // You may use usual ImageView class, no Compat necessary. 
    drawable.start()