9-Patch-Bildfehler in Android

Lesezeit: 5 Minuten

Benutzer-Avatar
Heber

Immer wenn ich versuche, ein 9-Patch-Bild hinzuzufügen \drawable Ordner in meinem Projekt erhalte ich den gleichen Fehler:

ERROR: 9-patch image C:\...\res\drawable\appwidget.9.png malformed.
Frame pixels must be either solid or transparent (not intermediate alphas).
Found at pixel #3 along top edge. Failure processing PNG image
C:\...\res\drawable\appwidget.9.png

Das Seltsame an diesem Beispiel ist, dass ich dieses Bild aus den „android-g1-icon“-Bildern habe, die in den SDK-Ressourcen gefunden wurden, also sollte es in Ordnung sein. Dasselbe geschah mit jedem 9-Patch-Image, das ich bisher ausprobiert habe. Was könnte falsch sein?

  • hast du es mit deiner eigenen 9.png probiert? Stellen Sie beim Definieren von Patches sicher, dass Sie genau einen entlang jeder Seite des Bildes definieren

    – Asahi

    25. November 2010 um 21:28 Uhr

Ich bin auf das gleiche Problem in Android Studio gestoßen:

AAPT out(943142208) : No Delegate set : lost message:Done
AAPT err(943142208): ERROR: 9-patch image /Users/cartman/Github/UteacherAndroid/RefactorDemo/app/src/main/res/drawable-xxhdpi/nav_shabow.9.png malformed.
AAPT err(943142208):        Frame pixels must be either solid or transparent (not intermediate alphas).
AAPT err(943142208):        Found at pixel #1 along left edge.

So habe ich es gelöst: Öffnen Sie das draw9patch-Tool in Ihrem Android Sdk-Verzeichnis

cd /Android/sdk/tools
./draw9patch

Öffnen Sie .9 png und speichern Sie es erneut. Ich hoffe es hilft.

  • Vielen Dank! Wenn Sie Android Studio verwenden, öffnen Sie einfach dieses Bild und speichern Sie es (Android Studio verwendet automatisch das draw9patch-Tool).

    – Artur Szymanski

    28. Dezember 2015 um 13:16 Uhr

  • Ich öffne einfach das draw9patch-Bild über den Ordner Android>sdk>tool und doppelklicke auf das drw9patch . Dann wird ein cmd- und 9-Patch-Bild in einem neuen Fenster geöffnet, danach, was soll ich tun @Jiawei Dai

    – Binil Surendran

    31. Mai 2016 um 5:40 Uhr

Benutzer-Avatar
veränderung_ist_notwendigkeit

Dies ist das Problem mit dem neuesten ADT, das 20.0.3 ist. Sie können stattdessen die *.9.png in *.png umbenennen und mit der Arbeit beginnen.

Ich denke, dies ist nur der Fehler mit dem ADT, da ADT für Version 18.0.0 nicht zu dieser Art von Fehler auffordert und gut funktioniert.

  • Das sieht nach einer Problemumgehung aus. Aber das hat mein Problem behoben. Vielen Dank

    – Changdeo Jadhav

    16. Dezember 2013 um 10:08 Uhr

  • Wird das Umbenennen dieser .9.png-Bilder in .png-Bilder zu einem Unterschied in meinem App-Verhalten führen. Ich meine, werden sich diese umbenannten .png-Bilder genauso dehnen wie .9.pngs?

    – Shakti Malik

    18. Januar 2014 um 11:21 Uhr

  • Wenn Sie diese verwenden, können Sie die Anwendung einfach auf dem Gerät oder im Emulator ausführen, ohne dass Fehler auftreten. von der ui-seite aus, welchen unterschied es machen wird, ich habe keine ahnung davon.

    – Veränderung_ist_Notwendigkeit

    21. Januar 2014 um 13:25 Uhr

  • Das Entfernen der .9 aus dem Dateinamen lässt die App funktionieren, ist aber keine Problemumgehung, da sie die gestreckten Bereiche effektiv entfernt und sie mit der Originaldatei identisch macht.

    – dbconfession

    4. September 2014 um 20:32 Uhr

  • Jawohl. Es ist nur eine Problemumgehung, um Dinge vorübergehend zum Laufen zu bringen.

    – Veränderung_ist_Notwendigkeit

    5. September 2014 um 5:25 Uhr

Der Ressourcen-Compiler entfernt 9-Patches um einen Pixel-Rand (und speichert die daraus gewonnenen Informationen vermutlich auf effizientere Weise außerhalb der .9.png-Datei). Wenn Sie diese .9.png-Dateien aus einer .apk-Datei gefischt haben, müssen Sie den Rahmen von Hand wieder hinzufügen.

  • Hm, das macht Sinn. Es ist seltsam, dass die Bilder in SDK-Ressourcen bereits optimiert sind, aber ich werde versuchen, sie zu reparieren oder eins von Hand zu erstellen (obwohl meine künstlerischen Fähigkeiten null sind). Danke vielmals!

    – Heber

    27. November 2010 um 12:26 Uhr

  • Ich habe einige .9.png-Bilder von Google_Keyboard.apk genommen und das gleiche Problem bekommen. Könnten Sie bitte im Detail erklären, wie ich selbst einen Rand hinzufügen kann?

    – Shakti Malik

    18. Januar 2014 um 11:24 Uhr

  • @ShaktiMalik verwendet einen 9-Patch-Editor, um die Patches und Padding für die Dateien zu definieren – entweder den in Android Studio integrierten oder den im Ordner sdk/tools.

    – Eran Goldin

    27. Februar 2015 um 21:35 Uhr

  • Wie speichert AAPT eine 9-Patch-Metainformation? Ich habe versucht, APK zusammenzubauen (nur in Android Studio), einen zerkleinerten 9-Patch (aus dem kompilierten APK) zu nehmen, ihn in GIMP erneut zu komprimieren (mit Speichern von Kommentaren) und dann den APK mit modifiziertem 9-Patch zu patchen. Aber es scheint, dass es nicht mehr richtig gedehnt wird. Was kann falsch sein und wie verarbeitet AAPT 9-Patch-PNGs?

    – Slava

    23. Juli 2017 um 15:28 Uhr

  • Verwenden Sie die Quelle … android.googlesource.com/platform/frameworks/base/+/…

    – Ruben Scratton

    24. Juli 2017 um 16:32 Uhr

Ich hatte das gleiche Problem, als ich ein Projekt von Eclipse nach Android Studio migrierte.

Was Sie tun müssen, ist, .9 aus dem Bilddateinamen zu entfernen und es dann im draw9patch-Tool (in Ihrem /sdk/tools-Verzeichnis) zu öffnen und jetzt auf die Schaltfläche Show Bad Patches in der rechten oberen Ecke zu klicken.

Sie sollten dann die rot markierten fehlerhaften Pixel und Bereiche sehen, Sie müssen dort etwas arbeiten, bis Sie keine roten fehlerhaften Flecken haben. Für mich habe ich nur ein Pixel am mittleren linken Rand und ein Pixel am mittleren oberen Rand markiert und fast den gesamten rechten Rand und den unteren Rand markiert. Klicken Sie erneut auf die Schaltfläche und prüfen Sie, ob Sie keine fehlerhaften Patches haben.

Speichern Sie die Datei als .9.png und legen Sie sie wieder in den res-Ordner Ihres Projekts. Android Studio sollte Ihr Projekt dann problemlos für 9 Patch-Bilder erstellen.

In meinem Fall habe ich fälschlicherweise den schwarzen Rand in die obere linke Ecke verlängert. Stellen Sie sicher, dass die Ecken transparent sind.

  • In meinem Fall habe ich fälschlicherweise die schwarzen unteren und rechten Ränder entfernt … Ich habe Ränder hinzugefügt und es wurde behoben. Ich empfehle Ihnen daher, Ihr Neun-Patch-Image zu überprüfen.

    – mazend

    4. Oktober 2019 um 9:56 Uhr

Benutzer-Avatar
Peter Mortensen

Jetzt gibt es zwei PNG-Cruncher im Android-Build-Tool, AAPT und einen Java-Cruncher. Beide suchen nach fehlerhaften 9-Patch-Images.

Ich habe mir den Quellcode des Build-Tools angesehen. Es gibt keine Option, die Komprimierung für 9-Patch-Images zu deaktivieren oder fehlerhafte zu ignorieren. Zumindest keine Optionen, die Benutzern zur Verfügung stehen.

Hier ist also ein einfaches Skript zum Ersetzen von AAPT:

https://gist.github.com/ksc91u/37513796b2cec37bb3c5

Wenn es aufgerufen wird, ein 9-Patch-Image zu komprimieren, kopiert es einfach die Datei, andernfalls startet es das echte AAPT mit @ARGV.

  • In meinem Fall habe ich fälschlicherweise die schwarzen unteren und rechten Ränder entfernt … Ich habe Ränder hinzugefügt und es wurde behoben. Ich empfehle Ihnen daher, Ihr Neun-Patch-Image zu überprüfen.

    – mazend

    4. Oktober 2019 um 9:56 Uhr

Benutzer-Avatar
RobVoisey

Wenn Sie das Bild mit einem Online-Generator-Tool erstellen, müssen Sie alle Sonderzeichen aus dem Namen entfernen, damit es funktioniert.

1179420cookie-check9-Patch-Bildfehler in Android

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy