Android: ¿Animación en la vista Galería?

Cuando utilizo el widget Galería , ¿cómo puedo obtener las imágenes para decir escala y brillar al ser seleccionado y reducido a escala y un-brillo en la falta de selección ?

Todos los tutoriales que he visto tienen este efecto, pero no puedo verlo …

¿Hay algún tipo de animación que tengo que adjuntar a la Galería ?

Espero que esto sea útil. Puedo "simular" la solución de encogimiento / crecimiento con el widget Gallery . Desde que eliminaron el getScale() , las cosas se complican un poco. Creo que esto no es la mejor solución en absoluto, pero al menos puedo vivir con ella.

Lo que he encontrado es que Gallery gestiona el enfoque EXTREMADAMENTE MAL. Así pues, el primer acercamiento era agregar un oyente del cambio del foco en el ImageView exhibido, pero ninguna suerte allí. Focus es un MESS allí … en términos de que, la imagen seleccionada no es la vista actualmente enfocada. He enviado un correo electrónico a la lista de correo de los desarrolladores de android sobre algún error en el doc del API (con respecto al método focusSearch() y algunos contantes de enfoque).

Aquí está mi solución a este problema:

Construye un recurso de animación para 'hacer 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 significa, entonces debe proceder a leer esto

Ese será nuestro efecto "grow", y necesitarás guardarlo en: res/anim/grow.xml o cualquier nombre que te res/anim/grow.xml (pero siempre en res / anim dir).

Puede seguir la guía de recursos de aquí para crear una vista Gallery . ImageAdapter crea una ImageView cada vez que el objeto Gallery llama a getView() . Una solución que podría implementar es agregar una línea al método getView() que identifica una View con una position , de esta manera:

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

Con esa línea añadida al método getView() del objeto ImageAdpater , puede identificar inequívocamente esa vista dentro de un listener, 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: Puede observar que todos los valores de animación y de parámetros de diseño han sido elegidos por mí a mano. Esto es porque no voy a limpiar el código para usted. Y, esto es sólo una solución al problema de enfoque BAD con este widget o el sistema de vista de Android. Si el enfoque estaba bien, entonces, todo lo que necesita hacer es establecer un oyente de cambio de enfoque que hace que el gros / shrink cuando se centró / desenfocado.

Espero que esto puede ayudarle a encontrar una manera de evitar su problema,

Saludos,

Nuevo EDIT: Este es el oyente que he establecido, también he añadido 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) { } } 

Necesitas usar un ImageSwitcher. El ImageSwitcher tiene métodos para configurar las animaciones de entrada y salida (cuando la imagen está seleccionada y deseleccionada, o seleccionada y reemplazada).

El siguiente enlace tiene un buen tutorial sobre cómo usarlo en conjunto con la Galería.

Implementé una animación similar como esta:

 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) {} }); 
  • Deslizamiento: cargar de forma desplegable pero no escalar el marcador de posición
  • Cómo superponer una imagen o una vista encima de una cámara capturada imagen
  • Obteniendo el ancho y altura de la imagen con la biblioteca picasso
  • Cargar imagen de Android en React Native
  • Filtrar fuentes de infrarrojos desde una imagen de cámara Android
  • Aviary para Android - Cómo forzar la imagen de la cosecha usando editor.launch
  • Cambiar el tamaño de las imágenes en GridView en Android
  • Guardar imagen en el espacio de almacenamiento local
  • ¿Por qué desaparece un conjunto de imágenes de Android?
  • Zoom y panorámica de ImageView Android
  • Creación de imágenes XHDPI, HDPI, MDPI, LDPI en Photoshop para Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.