Pregunta

Cuando uso el Widget Gallery , ¿cómo puedo obtener las imágenes que decir ampliar & resplandor en ser seleccionado y reducido & UN-resplandor en ser no seleccionada ?

Todos los tutoriales que he visto tienen este efecto, pero no estoy capaz de verlo ...

¿Hay algún tipo de animación que tengo para insertarse en el Galería

¿Fue útil?

Solución

Espero que esto es útil. Me las arreglo para "simular" la solución encoger / crecer con el widget Gallery. Ya que eliminan la getScale(), las cosas se ponen un poco más complicado. Creo que esta no es la mejor solución en absoluto, pero al menos puedo vivir con ello.

Lo que he encontrado es que Gallery gestiona el enfoque extremadamente malo. Por lo tanto, el primer enfoque fue la de añadir un oyente cambio de enfoque en el que se muestra ImageView, pero no hay suerte. El enfoque es un lío allí ... en términos que, la imagen seleccionada no es la vista centrado actualmente. He enviado un correo a android-developers lista de correo sobre algún error en documentación del API (con respecto a la focusSearch()method y algunos contants 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 consigue lo que quiere decir que entonces se debe proceder a leer este

Ese será nuestro efecto 'crecer', y que se necesitan para guardarlo en: res/anim/grow.xml o cualquier nombre que le suites (pero siempre en res / dir anim)

.

Puede seguir la guía de recursos de href="http://developer.android.com/intl/fr/resources/tutorials/views/hello-gallery.html" aquí 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ñadido al método getView() del objeto ImageAdpater, a continuación, puede identificar de manera inequívoca que la vista 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 se debe a que no voy a limpiar código para usted. Y, esto es sólo una solución temporal al problema de enfoque BAD con este widget o el sistema de visión androide. Si el enfoque estaban bien, entonces, todo lo que tiene que hacer es crear un oyente cambio de enfoque que hace que los gros / encogen cuando se hizo centrarse / fuera de foco.

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

Otros consejos

Es necesario utilizar un ImageSwitcher. El ImageSwitcher tiene métodos para establecer la en y fuera animaciones (cuando se selecciona la imagen y seleccionada, o se selecciona y se sustituyó).

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

He implementado una animación similar como esto:

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

    });
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top