2012-07-06 6 views
3

Si vous devez toujours dessiner le même rectangle, il est plus rapide de le faire avec un bitmap statique ou avec canvas.drawRect()?Toile Android - Dessiner un rectangle ou une image d'un rectangle

Pour cet exemple, les quatre rectangles sont en couches. Donc un boarder avec une couleur de remplissage, puis un boarder entre une couleur moyenne et la couleur de remplissage. Donc, quatre commandes paint.setColor() et quatre commandes canvas.drawRect ou une canvas.drawBitmap().

+2

Pourquoi ne pas le chronométrer? – Cheesebaron

+0

Si vous le faites, chronométrez-le sans le paint.setColor(); vous ne devriez pas modifier vos peintures dans la routine de tirage, vous devriez avoir quatre peintures. En utilisant chacun pour chaque rectangle. Ou les réutiliser si vous peignez la même couleur. – Tatarize

Répondre

3

Je recommande fortement drawRect().

Les bitmaps occupent une grande partie de la mémoire et peuvent conduire à Out Of Memory Exceptions si elles ne sont pas utilisées correctement.

Écrit par android:

bitmaps prennent beaucoup de mémoire, en particulier pour des images riches comme des photographies. Par exemple, l'appareil photo sur le Galaxy Nexus prend des photos jusqu'à 2592x1936 pixels (5 mégapixels). Si la configuration bitmap utilisée est ARGB_8888 (par défaut depuis Android 2.3), le chargement de cette image en mémoire prend environ 19 Mo de mémoire (2592 * 1936 * 4 octets), épuisant immédiatement la limite par application sur certains périphériques.

Pour prévenir les maux de tête et les pannes inattendues. Utilisez drawRect();

Si vous faites ces 4 tirages sur une base régulière pour différents objets, pensez à écrire une méthode qui fait les 4 pour vous. Donc, vous ne provoquez pas de répétition massive.

Par exemple:

public void DrawMyRect(Canvas canvas, int x, int y) 
{ 
    canvas.drawRect(x, y ,x + 15, y + 40, paint); 
    // Draw its line etc etc.. 
} 

Sinon, si vous optez pour le dessin bitmap, car il a des avantages:

See this epic Link by Android, on how to properly use Bitmaps

+0

Qu'en est-il: http://stackoverflow.com/questions/5643151/load-bitmap-or-draw-graphic-performance-question Je reçois des réponses mitigées. Et mes images sont assez petites pour que je ne devrais pas avoir une erreur de mémoire. La performance est tout ce qui m'importe maintenant. Il y aura six images 32x32. –

+0

Ajouté à ma réponse. Si vous utilisez de petites images, il ne devrait pas vraiment y avoir de problème. Aucun des deux n'aura une augmentation définitive des performances. J'ai ici une application qui dessine des centaines de lignes/formes, en moins d'une seconde. Si vous utilisez une petite quantité de formes, je ne vois aucun problème de performance. Si vous prenez des bitmaps, je recommande de suivre le lien de toute façon, pour vous assurer de le faire efficacement. – Doomsknight

+0

@NathanTornquist. Sans oublier que la taille d'un bitmap serait fixe, donc si vous le redimensionnez, il pourrait finir par avoir l'air pire. DrawRect est clair, net et peut être facilement changé sans perte d'apparence, pour s'adapter à votre forme/vos besoins. – Doomsknight

0

La différence de performance est probablement négligeable. Le bitmap utilisera plus de mémoire, les appels draw de la toile utiliseront légèrement plus de CPU. Vous pouvez probablement utiliser un ShapeDrawable si vous souhaitez réduire les appels sans le surcoût d'un bitmap.

Questions connexes