Notions vues lors du TP :
- Création d'une vue personnalisée (héritant de View)
- Dessin sur un Canvas d'une vue personnalisée
- Utilisation de menu
Nous reprenons l'exercice du chronomètre d'un précédent TP. Nous souhaitons ici remplacer le TextView affichant le temps cumulé écoulé par un composant graphique affichant une horloge analogique avec une apparence skeuomorphe. Les plus paresseux remarqueront qu'un tel composant graphique existe déjà (AnalogClock) mais nous désirons l'implanter nous-même.
Créer une classe MyClockView dérivant de View pour l'affichage analogique du temps. Cette classe disposera d'un setter setElapsedTime(int) pour indiquer le temps écoulé en secondes. La méthode onDraw(Canvas) devra être redéfinie pour dessiner le cadran et les aiguilles (heure, minute, seconde) sur le Canvas. Plutôt que d'implanter le code de dessin directement dans onDraw, on peut déléguer cette tâche à une nouvelle classe implantant Drawable. La méthode de dessin onDraw prend en paramère un Canvas permettant de réaliser les dessins 2D avec certaines méthodes drawX. Parmi ces méthodes, les plus intéressantes pour notre objectif pourraient être :
- drawOval(float left, float top, float right, float bottom, Paint paint) pour tracer le cadran
- drawLine(float startX, float startY, float stopX, float stopY, Paint paint) pour tracer une aiguille
- Notons que toutes les méthodes drawX prennent pour dernier argument une instance de Paint que l'on peut instantier une seule fois et qui peut accueillir à l'aide de setters des informations sur le mode de tracé (taille du trait, type de fonte, taille des caractères, couleur de tracé, anticrénelage...).
- Il est fortement conseillé d'éviter du code trop coûteux dans la méthode onDraw (en particulier des allocations mémoire) étant donné que cette méthode est appelée à chaque rafraîchissement graphique.
Comment faire pour ordonner un rafraîchissement graphique lorsque l'on change le temps affiché avec setElapsedTime ?
Remplacer le cadran circulaire dessiné par une image de fond, telle que celle-ci.
Intégrer la vue créée à l'activité chronomètre.
Attendre d'être contacté par les chemins de fer suisses et préparer un chèque de 21M$.
Remplacer les boutons de démarrage et d'arrêt du chronomètre par des items présents dans la barre d'action (utilisation de menu).