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 …
- Cargar imágenes grandes en mapa de bits?
- Base64 Error: El contenido de la imagen no es válido base64 data java
- Android lo que debe ser punto de pivote para girar la imagen alrededor de su centro de la base
- Generar miniatura de PDF en Android
- Reemplace los caracteres con Image en string y luego seleccione Textview
¿Hay algún tipo de animación que tengo que adjuntar a la Galería ?
- Mover mi barra de progreso con una imagen android
- Almacenamiento en caché de imágenes SVG en Android y uso de memoria
- almacenar y recuperar la imagen del servidor WAMP usando android
- La carga de Android se puede dibujar mediante programación y cambiar su tamaño
- ¿Se puede dibujar con el selector?
- Android - Split Dibujable
- Comprensión del uso de ImageView Matrix
- ¿Cómo evitar la reordenación de elementos en StaggeredGridLayoutManager después del cambio de orientación?
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) {} });
- Pasar el enfoque de padres a hijos en Linear Layout
- ¿Cómo puede configurar el proxy http mediante programación?