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).

Image non trouvée !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.

 

Image non trouvée !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.

Le fullscreen

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

Les bitmaps

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

Les fontes

Introduction
Définir les attributs de la police
Afficher le texte
Aligner le texte
Des informations
Exemple

L'animation 2D

SurfaceView
SurfaceHolder
Utilisation d'un thread indépendant
Exemple

Live Wallpaper en 2D

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

Matrice 2D

Les informations exif

Lire des informations
modifier les informations