Android: Animation en vue de la galerie?

Lorsque j'utilise le widget Gallery , comment puis-je obtenir les images pour dire que l' échelle et la lueur sont sélectionnées et mises à la nuance et ne pas briller en ne sont pas sélectionnées ?

Tous les tutoriels que j'ai vus ont cet effet mais je ne peux pas le voir …

Y at-il une sorte d' animation que je dois attacher à la Galerie ?

3 Solutions collect form web for “Android: Animation en vue de la galerie?”

J'espère que cela est utile. Je parviens à "simuler" la solution de rétrécissement / croissance avec le widget Gallery . Comme ils ont retiré le getScale() , les choses se compliquent un peu. Je pense que ce n'est pas la meilleure solution, mais au moins je peux vivre avec elle.

Ce que j'ai trouvé, c'est que Gallery gère l'accent EXTREMEMENT MAL. Ainsi, la première approche était d'ajouter un auditeur de changement de focus sur l' ImageView affiché, mais pas de chance. Focus est un MESS là-bas … en termes que, l'image sélectionnée, ce n'est pas la vue actuellement concentrée. J'ai envoyé un mail à la liste d'envoi de android-developers sur une erreur sur le doc API (en ce qui concerne la méthode focusSearch() et certains contentes de mise au point).

Voici ma solution à ce problème:

Créez une ressource d'animation pour «développer» l'image:

 <?xml version="1.0" encoding="utf-8"?> <scale xmlns:android="http://schemas.android.com/apk/res/android" android:fromXScale="1.0" android:toXScale="1.10" android:fromYScale="1.0" android:toYScale="1.10" android:duration="300" android:pivotX="50%" android:pivotY="50%" android:interpolator="@android:anim/accelerate_decelerate_interpolator" android:fillAfter="false"/> 

Si vous n'obtenez pas ce que cela signifie, vous devriez continuer à lire ceci

Ce sera notre effet de «croissance», et vous devrez l'enregistrer dans: res/anim/grow.xml ou quel que soit le nom qu'il vous res/anim/grow.xml (mais toujours en res / anim dir).

Vous pouvez suivre le guide de ressources ici pour créer une vue Gallery . ImageAdapter construit une ImageView chaque fois que l'objet Gallery appelle getView() . Une solution de contournement que vous pouvez implémenter est d'ajouter une ligne à la méthode getView() qui identifie une View avec une position , de cette façon:

 ... i.setId(position); ... 

Avec cette ligne ajoutée à la méthode getView() de l'objet ImageAdpater , vous pouvez identifier cette image dans un auditeur sans équivoque, par exemple:

 g.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { public void onItemSelected (AdapterView<?> parent, View v, int position, long id) { Animation grow = AnimationUtils.loadAnimation(YourActivity.this, R.anim.grow); View sideView = parent.findViewById(position - 1); if (sideView != null) ((ImageView)sideView).setLayoutParams(new Gallery.LayoutParams(150, 100)); sideView = parent.findViewById(position + 1); if (sideView != null) ((ImageView)sideView).setLayoutParams(new Gallery.LayoutParams(150, 100)); v.startAnimation(grow); v.setLayoutParams(new Gallery.LayoutParams(170, 150)); } public void onNothingSelected (AdapterView<?> parent) { System.out.println("NOTHING SELECTED"); } }); 

REMARQUE: Vous pouvez remarquer que toutes les valeurs de l'animation et les paramètres de mise en page ont été choisis par moi-même. C'est parce que je ne vais pas vous nettoyer le code. Et, ce n'est qu'une solution de contournement du problème de discussion Mauvaise avec ce widget ou le système de vue Android. Si la mise au point était correcte, alors, tout ce que vous devez faire est de configurer un auditeur de changement de focus qui fait le gros / rétréci quand il s'est concentré / non focalisé.

J'espère que cela peut vous aider à trouver un moyen de contourner votre problème,

Cordialement,

New EDIT: C'est l'auditeur que j'ai configuré, j'ai également ajouté la ligne i.clearAnimation() dans la méthode getView() :

 private class SelectListener implements AdapterView.OnItemSelectedListener { private Animation grow; private int last; public SelectListener() { grow = AnimationUtils.loadAnimation(RouteGallery.this, R.anim.grow); last = 0; } public void onItemSelected (AdapterView<?> parent, View v, int position, long id) { View sideView = parent.findViewById(last); if (sideView != null && last != position) sideView.clearAnimation(); v.startAnimation(grow); last = position; } public void onNothingSelected (AdapterView<?> parent) { } } 

Vous devez utiliser un ImageSwitcher. ImageSwitcher dispose de méthodes pour configurer les animations d'entrée et de sortie (lorsque l'image est sélectionnée et désélectionnée, ou sélectionnée et remplacée).

Le lien suivant contient un bon tutoriel sur la manière de l'utiliser en même temps que la Galerie.

J'ai implémenté une animation similaire comme celle-ci:

 final Animation shrink = AnimationUtils.loadAnimation(activity, R.anim.shrink); shrink.setFillAfter(true); gallery.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { // This iterates through the views which are currently displayed on screen. for (int k=0; k<gallery.getChildCount(); k++){ // Do whatever else you want, here. // This is how you get a particular element of a view ImageView background = (ImageView) gallery.getChildAt(k).findViewById(R.id.menu_item_background); //clear animation gallery.getChildAt(k).clearAnimation(); } // Scale the selected one view.startAnimation(shrink); } @Override public void onNothingSelected(AdapterView<?> adapterView) {} }); 
coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.