getNinePatchChunk
fonctionne très bien. Il a retourné null parce que vous deviez donner un Bitmap
"source" ninepatch. Il a besoin d'un "compilé" ninepatch image.
Il existe deux types de ninepatch formats de fichiers dans le monde Android ("source" et "compilé"). La version de la source est l'endroit où vous ajoutez la 1px la transparence de la frontière partout, lorsque vous compilez votre application en .apk plus tard, aapt permettra de convertir vos *.9.png fichiers au format binaire qui Android attend. C'est là le fichier png obtient son "morceau" de métadonnées. (lire en plus)
Bon, maintenant, à l' (vous êtes en train d'écouter DJ kanzure).
-
Code Client, quelque chose comme ceci:
InputStream stream = .. //whatever
Bitmap bitmap = BitmapFactory.decodeStream(stream);
byte[] chunk = bitmap.getNinePatchChunk();
boolean result = NinePatch.isNinePatchChunk(chunk);
NinePatchDrawable patchy = new NinePatchDrawable(bitmap, chunk, new Rect(), null);
Côté serveur, vous avez besoin pour préparer vos images. Vous pouvez utiliser l' Android Binaire Compilateur de Ressources. Cela automatise une partie de la douleur à l'écart de la création d'un nouveau projet Android juste pour la compilation de certains *.9.les fichiers png dans le Android format natif. Si vous le faites manuellement, vous serait essentiellement le faire un projet et de le jeter dans certains *.9.png fichiers (les fichiers"sources"), compiler le tout dans la .apk format, décompressez le fichier .apk fichier, puis de trouver l' *.9.fichier png, et c'est celui que vous envoyez à vos clients.
Aussi: je ne sais pas si BitmapFactory.decodeStream
sait à propos de la npTc morceau dans ces fichiers png, de sorte qu'il peut ou ne peut pas traiter le flux de l'image correctement. L'existence d' Bitmap.getNinePatchChunk
suggère que BitmapFactory
peut-on pourrait aller le chercher en amont de la base de code.
Dans le cas où elles ne savent pas à propos de la npTc morceau et vos images sont vissées de manière significative, alors ma réponse change un peu.
Au lieu d'envoyer l'compilé ninepatch images pour le client, vous écrivez une rapide application Android pour charger compilé des images et cracher l' byte[]
bloc. Ensuite, vous transmettre ce tableau d'octets à vos clients avec une image régulière-pas de bordures transparentes, non pas la "source" ninepatch de l'image, pas le "compilé" ninepatch image. Vous pouvez utiliser directement le morceau pour créer votre objet.
Une autre alternative consiste à utiliser la sérialisation d'un objet à envoyer ninepatch images (NinePatch
) à vos clients, comme JSON ou le haut-sérialiseur.
Modifier Si vous avez vraiment, vraiment besoin pour construire votre propre morceau de tableau d'octets, je voudrais commencer en regardant do_9patch
, isNinePatchChunk
, Res_png_9patch
et Res_png_9patch::serialize()
dans ResourceTypes.cpp. Il y a également une maison npTc morceau lecteur de Dmitry Skiba. Je ne peux pas poster de liens, donc si quelqu'un peut éditer ma réponse ça serait cool.
do_9patch: http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=tools/aapt/Images.cpp;h=3c471ca76107cc49b5f8e3ca15e87725ed80faf9;hb=refs/heads/gingerbread
isNinePatchChunk: http://netmite.com/android/mydroid/1.6/frameworks/base/core/jni/android/graphics/NinePatch.cpp
struct Res_png_9patch: https://scm.sipfoundry.org/rep/sipX/main/sipXmediaLib/contrib/android/android_2_0_headers/frameworks/base/include/utils/ResourceTypes.h
Dmitry Skiba trucs: http://code.google.com/p/android4me/source/browse/src/android/graphics/Bitmap.java