LevelListDrawable
Cette solution permet d'enregistrer dans un fichier XML différentes resources drawables. L'une d'entre elles pourra être affichée suivant une correspondance avec un niveau (level) que vous passerez en paramètre ou sur une plage de valeurs par rapport à ce niveau.
Typiquement le genre de code qui pourrait être utilisé pour afficher l'état de charge d'un batterie.
Mais vous pourriez aussi vous créer votre propre panel de progression avec ce genre de solution.
Le fichier xml
Voici un exemple de contenu du fichier xml
Ici, les images smileyface, smileyface1 et smileyface2 sont des ressources drawables disponibles sous /res/drawable.
Ce fichier level.xml est un drawable (certe particulier, puisque composé de drawables). Il sera donc stocké lui aussi sous res/drawable de votre projet.
Dans level-list, il suffit d'indiquer les différents drawables possibles par rapport à un niveau (ici de 0 à 2).
Il ne sera pas nécessaire d'indiquer sur une barre de % les 100 drawables correspondant si une telle précision n'est pas nécessaire. Vous pouvez en effet affecter à android:maxLevel des valeurs allant par exemple de 10 en 10. Vous n'aurez plus qu'à indiquer 10 images au lieu des 100, le système récupérant le drawable correspondant le mieux au niveau que vous passerez (qui lui évoluera toujours de 0 à 100%) lors du changement de l'affichage de votre barre de progression.
Sur le même
principe, Vous pouvez affecter un android:minLevel
Et l'utilisation dans un code
Il faut récupérer ce drawable:
Resources res = getResources();
LevelListDrawable drawable = (LevelListDrawable) res.getDrawable(R.drawable.level);
Puis attacher ce drawable à une instance d'ImageView
imageView = (ImageView) findViewById (R.id.imageView1);
imageView.setImageDrawable (drawable); // Attacher la liste à l'imageView
imageView.setImageLevel(niveau); // J'en profite pour initialiser l'image à
afficher en passant dans niveau le niveau initial désiré.
Vous pourrez ensuite faire évoluer l'image en changeant le niveau et en l'indiquant à imageView via la méthode setImageLevel(niveau);
Exemple
En reprenant le fichier xml ci-dessus, voici un code qui fera évoluer l'image affichée lorsque l'utilisateur va appuyer sur cette instance ImageView.
Le fichier AndroidManifest.xml sans rien de particulier:
Et activity_main.xml non exceptionnel non plus !
Et des exemples d'images à placer (pour rappel) sous res/drawable:
Images Basées sur le smiley de http://fr.wikipedia.org/wiki/Smiley.