J'espère que cela vous sera utile. Je parviens à "simuler" la solution de rétrécissement/croissance avec le widget Gallery
. Depuis qu'ils ont enlevé le getScale()
, les choses deviennent un peu compliquées. Je pense que ce n'est pas la meilleure solution du tout, mais au moins je peux vivre avec.
Ce que j'ai trouvé est que Gallery
gère le focus EXTREMEMENT MAUVAIS. Ainsi, la première approche consistait à ajouter un écouteur de changement de focus sur le ImageView
affiché, mais pas de chance là-bas. Focus est un MESS là ... en termes que, l'image sélectionnée n'est pas la vue actuellement focalisée. J'ai envoyé un mail à la liste de diffusion android-developers à propos d'une erreur sur le document API (concernant la méthode focusSearch()
et certains contants de focus).
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 this
Ce sera notre effet 'grow', 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/anim dir).
Vous pouvez suivre le guide de ressources de here pour créer une vue Gallery
. Le ImageAdapter
génère 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 identifier sans voir dans 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");
}
});
REMARQUE: Vous remarquerez peut-être que toutes les valeurs de l'animation et de paramètres de mise en page a été choisi par moi à la main. C'est parce que je ne vais pas nettoyer le code pour vous.Et, c'est juste une solution de contournement le problème de focus BAD avec ce widget ou le système de vue android. Si le focus était OK, alors, tout ce que vous devez faire est de définir un écouteur de changement de focus qui fait le gros/rétrécir quand il est focus/flou.
J'espère que cela peut vous aider à trouver un moyen de contourner votre problème,
Cordialement,
Nouveau 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) {
}
}
je fais la même chose mais il ne fonctionne pas dans certains appareils Android, si vous avez réalisé cette animation dans la galerie, s'il vous plaît envoyez-moi du code. – Hasmukh