2011-02-14 6 views
2

Je travaille sur un morceau de code où je dois écrire du texte et des images sur un bitmap. Malheureusement, je ne connais pas le nombre d'éléments de texte à ajouter dans le bitmap. Pour commencer, je crée un bitmap par ce problème est ..Bitmap étiré en android

Bitmap bitMapBuffer = Bitmap.createBitmap(containerWidth,50, Bitmap.Config.ARGB_8888); 

le bitmap ci-dessus est de taille fixe .. donc après un certain temps ce que j'écris ne montre pas le bitmap. Comment puis-je le faire fonctionner, je veux dire une sorte de type bitmap étiré. Je regardais dans BitmapDrawable, mais je ne peux pas passer un drawable à une toile comme celui-ci

Canvas c1 = new Canvas(bitMapBuffer); 

Comment puis-je gérer ce scénario?

+0

Vous pouvez passer un bitmap à un canevas. Ces deux lignes de code que vous avez là n'ont rien de mal avec eux. Votre problème est ailleurs. – user432209

+0

Oui. la ligne de code ci-dessus fonctionne ... le problème est la taille initiale de bitmap. Puisque la quantité de texte est inconnue, avoir une taille initiale fixe ne fonctionnerait pas. La réponse donnée ci-dessous résout le problème. Mais je suis juste curieux de savoir s'il y a une meilleure façon de le faire. – prashant

Répondre

0

Vous devez garder une trace de la taille d'un bitmap dont vous avez besoin. Lorsque vous devez ajouter un autre morceau de texte et que cela dépasse la limite du bitmap actuel, vous devez en créer un nouveau. Voici pour une pseudocode façon de le faire:

Bitmap buffer = Bitmap.createBitmap(containerWidth, 50, Bitmap.Config.ARGB_8888); 
Canvas c = new Canvas(buffer); 
// ... 
while (more_text_to_add()) { 
    if (bitmap_too_small()) { 
     Bitmap old = buffer; 
     buffer = Bitmmap.createBitmap(buffer.getWidth(), 
      buffer.getHeight + delta, Bitmap.Config.ARGB_8888); 
     c = new Canvas(buffer); 
     c.drawBitmap(old, 0, 0, null); 
    } 
    draw_more_text(); 
} 

Dans ce code, delta est la hauteur ajoutée que vous voulez pour le bitmap.

+0

Je suis d'accord que cette solution fonctionnera, mais je suis peu préoccupé par le problème de performance lié à la création d'un nouveau bitmap de temps en temps. Je pensais dans les lignes de ... est-il un moyen d'avoir un bitmap extensible .. un qui s'étend tout seul. – prashant

+0

Vous pouvez certainement étirer un bitmap lorsque vous le dessinez (en changeant la matrice qui lui est appliquée dans l'opération de dessin), mais cela ne fait pas plus de place pour cela. –

+0

hmmm ... j'ai implémenté votre solution. Si ça commence à tuer mon application ... j'essaie d'autre chose. Merci pour votre temps. – prashant

0

Avez-vous considéré NinePatch?