Question

Lorsque j'utilise le widget Gallery , comment puis-je obtenir les images pour dire intensifier lueur être sélectionné et réduite un lueur être désélectionné ?

Tous les tutoriels que j'ai vu ont cet effet, mais je ne suis pas en mesure de le voir ...

Y at-il une sorte de animation que je dois joindre à la Galerie ?

Était-ce utile?

La solution

Espérons que cela est utile. Je parviens à « simuler » la solution rétrécir / grandir avec le widget Gallery. Comme ils ont enlevé le getScale(), les choses deviennent un peu compliqué. Je pense que ce n'est pas la meilleure solution à tout, mais au moins je peux vivre avec.

Ce que j'ai trouvé que Gallery gère le focus BAD EXTRÊMEMENT. Ainsi, la première approche a consisté à ajouter un changement de mise au point d'écoute sur le ImageView affiché, mais pas de chance là-bas. Focus est une MESS là ... en des termes qui, l'image sélectionnée n'est pas la vue actuellement concentré. Je vous ai envoyé un mail à android-mailing list des développeurs à propos une erreur sur l'API doc (en ce qui concerne la focusSearch()method et quelques Constantes de mise au point).

Voici ma solution à ce problème:

Construire une ressource d'animation pour 'grandir' 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 ne recevez pas ce que cela signifie alors vous devriez passer à lire cette

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

.

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

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

Avec cette ligne ajoutée à la méthode getView() de l'objet ImageAdpater, vous pouvez alors identifier clairement ce point de vue au sein d'un auditeur, 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");

    }
    });

NOTE: Vous pouvez remarquer que toutes les valeurs de l'animation et de paramètres de mise en page a été choisi par moi à la main. Ceci est parce que je ne vais pas le code propre pour vous. Et, c'est juste une solution de la question de mise au point BAD avec ce widget ou le système d'affichage Android. Si l'accent était OK, alors, tout ce que vous devez faire est de définir un changement de mise au point d'écoute qui fait les gros / rétrécissent quand il se concentrer / non focalisée.

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

Cordialement,

Nouvelle EDIT: Ceci est l'auditeur que j'ai mis, j'ai aussi 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) {
    }
}

Autres conseils

Vous devez utiliser un ImageSwitcher. Le ImageSwitcher a des méthodes pour fixer la dans et hors des animations (lorsque l'image est sélectionné et désélectionnés, ou choisi et remplacé).

Le lien suivant a un bon tutoriel sur la façon de l'utiliser conjointement avec la Galerie.

Je mis en œuvre une animation similaire à ceci:

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) {}

    });
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top