J'ai une application de dessin qui permet à l'utilisateur de dessiner sur une toile vierge. J'essaie de dessiner une «vignette» mise à l'échelle de l'image bitmap actuelle de sorte que lorsque l'utilisateur a mis à l'échelle dans la vue, ils peuvent référencer la vignette pour avoir une idée de l'endroit où ils se trouvent dans la toile de dessin globale. J'ai la mise à l'échelle qui fonctionne, et affiche la vignette à l'emplacement correct, mais il semble que la vignette ne soit pas mise à jour sur les onDraws suivants lorsque de nouvelles lignes/formes sont ajoutées.Android Scaling Canvas Bitmap
Alors que j'ai accès au bitmap sous-jacente de ce point de vue (pour montrer la vignette, être en mesure d'enregistrer facilement le bitmap dans un fichier, etc.) Je fais ce qui suit dans OnSizeChanged() pour la vue:
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
// set the canvas height, panning, etc, based on the now inflated View
mWidth = getWidth();
mHeight = getHeight();
mAspectRatio = mWidth/mHeight;
mPanX = 0;
mPanY = 0;
// create the Bitmap, set it to the canvas
mBitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
mCanvas.setBitmap(mBitmap);
draw(mCanvas);
}
Ensuite, lorsque l'utilisateur tire et invalident() est appelée, je fais ce qui suit dans onDraw() pour générer la vignette:
@Override
protected void onDraw(Canvas canvas) {
<snipped code that draws paths, shapes to canvas>
if (mScaled) {
Bitmap out = Bitmap.createScaledBitmap(mBitmap, (int) thumbWidth, (int) thumbHeight, false);
canvas.drawBitmap(out, null, thumbnailRectF, thumbCanvasPaint);
}
}
la miniature s'affiche dans l'espace défini par thumbnailRectF en utilisant la thumbCanvasPaint , mais dans les appels onDraw() suivants, le bitmap mis à l'échelle a pas changé de son état d'origine, même si le canevas actif en taille réelle affiche tous les dessins, etc. Basé sur des tests, il me semble que pendant que je mets le Bitmap avec l'appel initial à dessiner (mCanvas) ;, Les onDraw suivants écrivent dans le bitmap sous-jacent plutôt que dans celui spécifié dans onSizeChanged(). Donc, je suppose que j'essaie de comprendre comment j'attache la toile onDraw à un bitmap que je peux accéder à nouveau pour effectuer des re-tailles, enregistrer, etc .. En regardant this question, je pensais que le tirage au sort (mCanvas) ; call lierait l'onDraw au bitmap spécifié dans le mCanvas (dans mon cas, mBitmap), mais en pratique, il ne semble pas fonctionner, dans la mesure où les mises à jour sur le canvas sont concernées.
Merci,
Paul
Je vois similitude de votre solution cinque cet exemple: http://www.barebonescoder.com/2010/06/android-development-simple-2d-graphics-part-1/ – Lumis
Wow, oui, Le programme lié est construit presque à 100% de la même manière, à l'exception de mon problème avec l'attachement du bitmap à la toile, etc. Essayer cette solution maintenant. –