:: Enseignements :: ESIPE :: E4INFO :: 2015-2016 :: Interface Graphique avec Android ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Galerie d'images fragmentée |
L'objectif est de manipuler des fragments sous Android. Un fragment propose
des composants graphiques réutilisables dans différentes activités.
Exercice 1 - Gallerie simple
Nous voulons tout d'abord créer une galerie d'images simple. Pour ce
faire, nous allons utiliser un
GridView affichant des images
récupérées dans le répertoire
assets embarqué par
l'application.
-
Placez les images de cette archive
dans un sous-répertoire d'assets
-
Chargez les images sous la forme de Bitmap
-
Créez un GridView disposant d'un adaptateur avec une méthode
getView redéfinie retournant une ImageView pour
afficher une vignette de l'image.
-
Créez une nouvelle activité affichant une image en plein écran (on
pourra communiquer dans l'intent de lancement le chemin vers l'image à
charger)
-
Lancez l'activité d'affichage en plein écran lorsque l'utilisateur
clique sur une des images miniatures de la galerie.
Exercice 2 - Fragmentation
Nous allons maintenant définir un nouveau layout qui ne sera affiché qu'en
mode paysage. Ce layout affiche toujours la
GridView mais ajoute
en plus une zone de visualisation de l'image sélectionnée sur la
GridView
-
Créez un nouveau layout intégrant la GridView de visualisation de la
galerie ainsi qu'un LinearLayout vide pour accueillir
la zone de visualisation de l'image sélectionnée. Ce layout ne sera
utilisé qu'en mode paysage (le layout originel reste utilisé en mode
portrait).
-
Créez un fragment retournant dans sa méthode onCreateView()
une ImageView pour l'affichage d'une image. Celui-ci doit
récupérer un argument spécifiant le chemin vers l'image à charger.
-
Lorsqu'un clic est réalisé sur un item de la galerie, vérifiez si vous
êtes en mode paysage (cette information peut être récupérée à l'aide
de getResources().getConfiguration() ou alors en examinant le
layout) ; dans cette situation, placez un nouveau fragment dans le
container destiné à l'accueillir (il faut utiliser une
FragmentTransaction sur le FragmentManager. Bien sûr
en mode portrait, il faut toujours continuer à lancer une nouvelle
activité pour la visualisation plein écran de l'image.
Note : On pourra aussi utiliser le design pattern State.
Exercice 3 - (BONUS) Séparateur
Nous voulons maintenant rajouter en mode paysage une ligne de séparation
entre le
GridView de la galerie et l'
ImageView
d'affichage de l'image sélectionnée. Nous devons être capable de déplacer
cette ligne de séparation en cliquant dessus et en laissant le doigt
appuyé tout en le translatant sur la gauche ou la droite. La galerie et
l'
ImageView doivent être redimensionnés en conséquence.
-
Rajoutez un composant graphique (un LinearLayout peut très bien faire
l'affaire ou une vue quelconque) pour représenter le séparateur.
Celui-ci devra disposer d'une largeur fixe.
-
Rajoutez un listener appelé lors d'une opération de touché sur le
diviseur. On pourra récupérer l'abscisse absolue de l'événement avec
le getter getRawX() : modifiez le layout en conséquence. Si
le layout est un LinearLayout, modifiez la largeur de la
galerie et du composant d'affichage de l'image sélectionnée. Si le
layout est un RelativeLayout, modifiez la marge à droite du
séparateur. Dans tous les cas, le layout s'occupera de réagencer les
composants automatiquement.
© Université de Marne-la-Vallée