J'ai cherché pendant quelques heures et je n'ai pas réussi à trouver une réponse précise et concise à ma question. J'ai une application où j'ai besoin de dessiner un terrain de sport (y compris toutes les lignes de tangage) à l'écran. Jusqu'à présent, j'ai étendu le SurfaceView et copié à peu près le reste de la démo de LunarLander. Toutes les données dont l'application a besoin pour dessiner la hauteur aux bonnes dimensions sont reçues d'une socket qui fonctionne bien aussi. Cependant, à la minute dans la fonction onDraw(), je dessine toutes les lignes de chaque image qui provoque un framerate assez lent dans l'émulateur (par exemple ~ 10fps). Voici ma fonction onDraw():Dessin 2D efficace sous Android
@Override
public void onDraw(Canvas canvas) {
canvas.drawARGB(255,0,144,0);
canvas.drawLine(canvas, getFirstLine(), mPaint);
canvas.drawRect(canvas, getFirstRect(), mPaint);
canvas.drawRect(canvas, getSecondRect(), mPaint);
...
canvas.drawRect(canvas, getSecondRect(), mPaint);
drawAnimatedObjects();
}
Ensuite, je dessine des cercles et des positions différentes sur ce fond. Ma question est comment puis-je rendre cela plus efficace? Est-il possible de dessiner les lignes lors de l'initialisation de l'application et de ne pas avoir à les redessiner à chaque image?
Merci pour toute aide.
OpenGL ES fonctionne bien mieux que d'utiliser le canevas. Si vous pouvez suivre cette route, ça vaut le coup. Il y a aussi des démonstrations de dessin 2d dans le projet API Demos. –
Avez-vous testé sur un vrai appareil? Les performances graphiques de l'émulateur ne sont pas représentatives de ce que vous verrez sur les périphériques réels. – adamp