[Android] Carrousel

Bonjour tout le monde,

je reproduis honteusement ici la requête d’un ami concernant Android.

En espérant que de devs Android soient sur la zone (/me cast Monsieur_Max) :slight_smile:

Merci à vous !

[quote]Bonjour à tous,

Je développe actuellement une application Android, et je rencontre quelques difficultés à créer un carrousel.
Je me sers pour cela de la classe Gallery.
Ce que j’aimerais, c’est que l’image focused soit plus grande que celles non sélectionnées.
La plupart des tutos trouvés sur le net se servent de la fonction getScale(), mais cette dernière a été supprimée à partir du sdk 0.9

Je pense que je m’approche d’un début de solution.
Je me sers de OnItemSelectedListener :

Le code ds mon activity :

[code]public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main_screen);
Gallery g =((Gallery) findViewById(R.id.gallery));
g.setAdapter(new MainMenuAdapter(this));
g.setOnItemSelectedListener(this);
g.setCallbackDuringFling(false);
}

public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {
	v.setLayoutParams(new Gallery.LayoutParams(150, 150)); 
}

public void onNothingSelected(AdapterView<?> arg0) {
}[/code]

Le code dans mon adapter :

public View getView(int position, View convertView, ViewGroup parent) { ImageView i = new ImageView(myContext); i.setImageResource(myImageIds[position]); i.setAdjustViewBounds(true); i.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); i.setScaleType(ImageView.ScaleType.FIT_XY); return i; }
Ca rescale bien lors du focus. Par contre il reste un problème : ca ne descale pas le précédent. Par contre toutes les autres images sont bien en taille normale.
Par exemple si j’ai 5 images, que je passe de la 4ème à la 5ème, 4 et 5 sont plus grand, et 1,2,3 taille normale :crying:
Une idée ?[/quote]

Salut Le_Duc,

je ne vais pas pouvoir être de grand conseil car pour le moment, je ne me suis pas frotté aux composants fondamentaux d’Android.
Mon expérience se limite à un objet View ( SurfaceView ) dédié à l’affichage de graphisme.
Tout le reste de mon code est un framework perso en java pur qui affiche du graphisme dans cette View.

Cependant, je pense qu’avec un peu de code, il doit être possible de savoir quel était l’item avec le dernier focus (avant changement ) , de récuperer cet item ( via une méthode de l’objet Gallery? ) et de le redimensionner à taille normale lors d’un évenement onItemSelected sur Gallery.

J’espère que ça suffira, je pourrai pas fournir de solution clé en main.
( Et sinon, ton pote peut très bien venir sur Geekzone hein, on va pas le bouffer )

Il doit avoir les genoux fragiles. :slight_smile:

Désolé pour le HS.

Je pense qu’il faut dans la methode public void onNothingSelected(AdapterView<?> arg0) changer le layout pour que ça redevienne plus petit, comme il le fait dans onItemSelected(AdapterView<?> parent, View v, int position, long id).

Mais bon, là c’est en vitesse au boulot sans pouvoir tester.

Merci à tous je lui forwarde vos réponses.

Si y a du nouveau je posterai.

Un petit tour sur la javadoc android :

Le onNothingSelected() est juste une méthode appelée après un événement déclenché lorsque la vue n’a plus d’item selectionné.
Or là, il est question de changement d’item sélectionné.
Je ne suis donc pas certain que cela fonctionne mais encore une fois, il faut tester.

Testé mais sans succès :slight_smile:

Merci quand même on continue de chercher.

Il faudrait que tu nous précises ce qui a été testé.

Personnellement, je pense que stocker l’id de l’object actuellement sélectionné, puis lors d’un changement d’item sélectionné, réutilisé cet id pour redonner à l’objet sa taille normale.
C’est basique mais je pense que la simplicité des APIs dans ce cas nous indique que la solution est toute simple.

[quote=“Monsieur_Max, post:6, topic: 49604”]Un petit tour sur la javadoc android :

Le onNothingSelected() est juste une méthode appelée après un événement déclenché lorsque la vue n’a plus d’item selectionné.
Or là, il est question de changement d’item sélectionné.
Je ne suis donc pas certain que cela fonctionne mais encore une fois, il faut tester.[/quote]

Pas pu tester quand l’événement qui appelle onNothingSelected est effectivement déclenché, mais tu dois avoir raison. Du coup je seconde ton avis: il faut garder en mémoire l’objet actuellement sélectionné et lors d’une sélection faire le changement de taille de cet objet.

Bonjour à tous,

Je suis le développeur :slight_smile:

Merci pour toutes vos pistes, cela m’a donné beaucoup d’idées.
J’ai au final fait comme Longfield l’a judicieusement proposé.
Dans la fonction onItemSelected je stock le précédent focused que je redimensionne comme il faut :

if(previousView != null) previousView.setLayoutParams(new Gallery.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); v.setLayoutParams(new Gallery.LayoutParams(150, 150)); previousView = v;

Merci beaucoup !

Salut Yamaraja !

Bienvenu parmi nous.
Ravi de voir que nous avons été de bons conseils. N’hésite pas à venir aider les autres développeurs Android avec ton experience.
On est pas beaucoup et un coup de main fait souvent gagner un temps précieux en plus d’être formateur.

Comme je l’ai dit un peu plus haut, le SDK donne un jeu d’objet et de méthodes très simples, dans le but de laisser une énorme liberté aux développeurs.
Concrètement, il faut quasiment tout coder soit-même et sans cesse surcharger les classes de bases.
Ce qui est étonnant , c’est que tout ceci est quand même super simple.

edit: ah et sinon sans vouloir tirer la couverture, l’idée est de moi, non mais !

Que d’Android en ce moment, on a un thread ici si tu veux venir parler de ton expérience googleienne : forum

Salut,

Pas de problème pour partager mon « expérience », qui est encore plus que légère pour le moment :slight_smile: