IllegalArgumentException: la largeur et la hauteur doivent être > 0 lors du chargement d'image à partir de la Vue
Je suis en train de dessiner sur une ImageViewTouch, une bibliothèque qui permet de pincer pour zoomer. Je suis capable de dessiner sur l'image à l'aide de la Toile, mais quand je zoom de l'image, le dessin disparaît.
Pour cela, je suis en train de convertir la vue d'une image et la définir theImageBitmap pour cette même vue. Voici le code:
mImage.setDrawPath(true);
mImage.setImageBitmap(loadBitmapFromView(mImage));
public static Bitmap loadBitmapFromView(View v) {
Bitmap b = Bitmap.createBitmap( v.getWidth(), v.getHeight(), Bitmap.Config.ARGB_8888);
Canvas c = new Canvas(b);
v.layout(0, 0, v.getWidth(), v.getHeight());
v.draw(c);
return b;
}
Quand je fais cela, j'ai le log d'erreur:
07-11 21:13:41.567: E/AndroidRuntime(20056): java.lang.IllegalArgumentException: width and height must be > 0
07-11 21:13:41.567: E/AndroidRuntime(20056): at android.graphics.Bitmap.createBitmap(Bitmap.java:638)
07-11 21:13:41.567: E/AndroidRuntime(20056): at android.graphics.Bitmap.createBitmap(Bitmap.java:620)
Si je supprime le loadBitmapFromView
appeler le dessin apparaît normalement sur l'image. Quand j'ai essayer de faire toute interaction avec l'image (comme un zoom avant ou arrière), le dessin disparaît, remaing seulement l'image de fond, qui est une image.
--- EDIT ---
Y a plus de code placé après le loadBitmapFromView
appel. Le cas est: j'ai un groupe de boutons radio listenner et quand je vérifie certains bouton radio, je charge l'image et de tirer des possibles dessins sur elle.. alors j'essaie de convertir tout (l'image et les dessins) dans une seule image.
Voici les autres centres de la partie du code:
bitmap = BitmapUtils.decodeSampledBitmapFromResource(root + DefinesAndroid.CAMINHO_SHOPPINGS_SDCARD + nomeImagemAtual, size.x, size.y);
mImage.setImageBitmap(bitmap);
Après cela, je dessine tout ce que j'ai à dessiner et à essayer de convertir la vue de l'image bitmap à l'aide de la loadImageBitmap méthode que j'ai indiqué.
la decodeSampledBitmapFromResource
méthode que j'ai obtenu à partir de ce lien sur les développeurs android http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
Vous devez vous connecter pour publier un commentaire.
J'ai enfin trouvé une solution pour mon problème.
Je suis en utilisant le
post
méthode de la Vue, qui sera exécutée seulement après le point de vue de mesurer et de layouting, de cette façongetWidth()
etgetHeight()
retourne la largeur et la hauteur.Voici l'exemple de code:
Espère que ça aide aussi à quelqu'un d'autre 🙂
Runnable
comme ci-dessus et votre largeur et la hauteur ont pas de problèmes de plus?Si tout est correct, vous êtes à l'exécution de votre code trop tôt.
Le point de vue de la mise en page n'a pas encore été mesurée par Android. Essayez d'exécuter dans OnResume juste pour voir si c'est votre problème.
Cheers!
java.lang.IllegalArgumentException: width and height must be > 0
est parce que dans votreBitmap.createBitmap()
appelv.getLayoutParams().width
ouv.getLayoutParams().height
est de 0. Probablement leLayoutParams
sont mal définies dansmImage
.Mise à jour:
setLayoutParams()
pour lamImage
avant d'utilisercreateBitmap()
. Quelque chose comme ceci:getLayoutParams().height
etgetLayoutParams().width
sera de 0.mImage
.Dans mon cas, j'ai oublié de le mettre
orientation
àvertical
pour les parentsLinearLayout
et la valeur par défaut dehorizontal
a été défini, alors je l'ai mis et mon problème disparu...