Faire de la 2D sous Android
Jusqu'à présent, vous n'avez pas eu besoin de gérer explicitement l'affichage des widgets comme pour le textview, ...
En effet, si l'activité s'affichait à l'écran, rien à faire hormis indiquer le fichier XML à utiliser pour que l'écran correspondant s'affiche.
De même, si un objet venait à avoir son affichage altéré par l'affichage d'un autre chose graphique, vous n'aviez pas à le restaurer une fois celui-ci de nouveau visible, Android le faisant pour vous.
Cette tâche vous sera pourtant nécessaire si vous faîtes de la 2D.
Mais rien de bien compliqué en fait, le principe reste identique à tous les systèmes de fenêtrages:
Que faut-il pour faire une animation ?
- Une méthode qui doit se déclencher pour indiquer que le contenu de la fenêtre est à dessiner (lorsque votre application vient d'être chargée par exemple) ou altérée (exemple après l'apparition d'une fenêtre de dialogue, lorsque celle-ci se referme, l'image sera à refaire).
- De plus, dans le cas d'une animation 2D, il faudra aussi avoir le moyen de déclencher la méthode forçant à redessiner. Une commande qui indique artificiellement au système que le contenu doit être réaffiché car celui-ci est altéré.
RenderView
Comment cela marche ? Et bien en dérivant tout simplement la classe View. Cette classe contient une méthode onDraw, c'est elle qui sera lancée lorsque le contenu sera altéré. A vous alors de redessiner le contenu.
Pour cela, il suffit de créer une classe interne dans votre activité que vous nommerez par exemple RenderView (c'est habituellement le nom qui est donné, je n'ai rien inventé, et le nom est plutôt explicite non ?)
Ensuite, l'activité précisera la classe de rendu en paramètre à la méthode setContentView lors de son onCreate.
Android fera désormé appel à la classe interne pour tout ce qui est traitement du rendu !
onDraw
Vous pouvez voir que la méthode onDraw reçoit un paramètre en entrée. Il s'agit d'un canevas, c'est grâce à ce canevas que vous allez pouvoir effectuer vos opérations 2D (utilisation de la librairie graphique de bas niveau nommée Skia).
Les opérations
graphiques effectuées dans le onDraw ne seront pas faites immédiatement
à l'écran, mais dans une zone mémoire. Elle sera ensuite
transférée à l'écran par le système. Les
opérations graphiques seront expliquées dans les chapitres suivants
(c'est le principe des écrans logiques
et physiques qui est mis en oeuvre).
Enfin, la méthode View.invalidate(), c'est elle qui redéclenchera la méthode onDraw de manière artificielle.
Ainsi, si vous laissez négligement un invalidate() à la fin de la méthode onDraw, le système sera obligé de relancer la méthode onDraw le plus vite possible (Vous êtes en effet prioritaire car l'application est en avant plan !). Cette solution nous permettra donc de changer le contenu de l'écran et de demander son affichage.
Dans le cas d'une
animation, celle-ci peut brusquement être suspendue par cet enfoiré
de garbage collector, qui peut prendre un peu plus d'une demi seconde pour faire
son travail de nettoyage ! D'où une animation qui peut saccader par moment...
Pour rappel
Voici deux classes qui devraient servir dans la gestion 2D:
FLAG_KEEP_SCREEN_ON ou Wake Locks pour interdire la mise en veille de l'écran.
Désactivation de la barre de titre
Désactivation de la décoration d'une fenêtre, barre de notification
La 2D
Opérations graphiques de bases
Positionner la couleur de fond
La classe Paint
Dessiner un pixel
Dessiner un segment de droite
Dessiner un rectangle vide/plein
Dessiner un cercle vide/plein
Charger un flux bitmap
Des informations sur le bitmap
Création d'une instance de bitmap
Libérer de l'espace mémoire
Agrandir/réduire un bitmap
Afficher notre bitmap
Blending et bitmap
Exemple
Introduction
Définir les attributs de la police
Afficher le texte
Aligner le texte
Des informations
Exemple
SurfaceView
SurfaceHolder
Utilisation d'un thread indépendant
Exemple
Les grandes lignes
Première étape - création du projet
Deuxième étape - création d'une ressource wallpaper
Troisième étape - le wallpaper service
Quatrième étape - Le fichier ManifestAndroid.xml
Exemple
Le setup du wallpaper
Installation automatique d'un live wallpaper
Annexe
Lire des informations
modifier les informations