Espero que esto te ayude. Logro "simular" la solución de reducción/crecimiento con el widget Gallery
. Desde que eliminaron el getScale()
, las cosas se complicaron un poco. Creo que esta no es la mejor solución, pero al menos puedo vivir con eso.
Lo que he encontrado es que Gallery
gestiona el enfoque extremadamente malo. Entonces, el primer enfoque fue agregar un detector de cambio de enfoque en el ImageView
, pero no hubo suerte allí. El foco es un MESS allí ... en términos que, la imagen seleccionada no es la vista actualmente enfocada. He enviado un correo a la lista de distribución de android-developers sobre algún error en el API doc (con respecto al método focusSearch()
y algunos contantes de enfoque).
aquí está mi solución a este problema:
Construir un recurso de la animación de 'crecer' la imagen:
<?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 no obtiene lo que quiere decir entonces se debe proceder a leer this
Ese será nuestro efecto 'crecer', y tendrá que guardarlo en: res/anim/grow.xml
o cualquier nombre que le suites (pero siempre en res/dir anim).
se puede seguir la guía de recursos de here para crear una vista Gallery
. El ImageAdapter
construye un ImageView
cada vez que el objeto Gallery
llama getView()
. Una solución alternativa podría implementar es la adición de una línea con el método getView()
que identifica un View
con un position
, de esta manera:
...
i.setId(position);
...
Con esa línea añade al método del objeto ImageAdpater
getView()
, a continuación, puede identificar de manera inequívoca que ver dentro de un oyente, por ejemplo:
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");
}
});
NOTA: Usted puede notar que todos los valores de la animación y de los parámetros de diseño ha sido elegido por mí en la mano. Esto es porque no voy a limpiar el código para ti.Y, esto es solo una solución al problema de MALO enfoque con este widget o el sistema de vista de Android. Si el enfoque estuviera bien, entonces, todo lo que tiene que hacer es establecer un oyente de cambio de enfoque que haga el gros/encogimiento cuando se enfoca/desenfoca.
Espero que esto puede ayudar a encontrar un camino alrededor de su problema,
Saludos,
Nueva EDIT: Este es el oyente he puesto, también agregué la línea i.clearAnimation()
en el método 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) {
}
}
estoy haciendo lo mismo pero no funciona en algunos dispositivos Android, si tiene esta animación en la vista de galería, envíeme el código. – Hasmukh