Je développe un jeu Android 2D simple et je veux dessiner l'arrière-plan de chaque niveau lorsque le niveau commence. L'arrière-plan sera statique pour chaque niveau, il ne s'animera pas et ne bougera pas. Dans un premier temps, je dessinais l'arrière-plan dans une vue personnalisée en utilisant une toile et je chargeais cette vue comme arrière-plan du niveau. Cela a fonctionné, cependant j'ai remarqué que si je dessine beaucoup de lignes et de formes, l'interface utilisateur commence à bégayer. J'ai résolu le problème en tirant l'arrière-plan via la toile et l'enregistrer directement dans un bitmap, que je puis charger en arrière-plan ImageView
comme vous pouvez le voir ci-dessous:Android 2D jeu de toile - dessiner bitmap de fond
CustomView bgView = new CustomView(this); //this view draws the background
Bitmap bitmap = Bitmap.createBitmap(screenWidth, screenHeight, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bitmap);
bgView.draw(canvas);
ImageView imageViewBg = (ImageView) findViewById(R.id.imageViewBg);
imageViewBg.setImageBitmap(bitmap);
Le problème que je remarque avec cette approche est que je suis en train de créer un bitmap avec une taille de [screenWidth x screenHeight] qui pourrait provoquer un OutOfMemoryError
. Alors, quelle est la meilleure approche pour dessiner l'arrière-plan d'un jeu en plein écran? Le problème est que je veux dessiner dynamiquement, je ne peux pas le charger directement à partir des actifs. (Je pourrais utiliser le profil Bitmap.Config.RGB_565
, mais cela ne fera que réduire la taille de l'image bitmap de moitié, ce n'est pas la solution optimale).
Je peux voir que vous chargez le bitmap à partir de ressources, alors que je veux le créer à partir de zéro. De plus, si le bitmap a la taille de l'écran, ne serait-il pas encore énorme en termes d'allocation d'octets? – MScott
Je l'ai chargé à partir de ressources pour le rendre testable. Comment vous chargez le bitmap est à vous. Comme si la mémoire, c'est un problème que je n'ai pas considéré ici. Je vais mettre à jour la réponse avec une solution différente. – Zoe
Voir les modifications apportées à la réponse – Zoe