2011-05-19 9 views
6

que he estado tomando el pelo a cabo tratando de conseguir esta tarea aparentemente simple para trabajar. Necesito poner un gif animado en una superposición en una vista de mapa.GIF animado en superposición sobre MapView

tengo el siguiente código:

AnimationDrawable anim = (AnimationDrawable)getResources().getDrawable(R.drawable.explosion);

Sin embargo ¿cómo puedo ahora pop que en una superposición y tirarla sobre el MapView?

la actualidad, para poner imágenes estáticas tengo esto:

 

class DrawableIcon extends ItemizedOverlay { 
    private ArrayList mOverlays = new ArrayList(); 
    public DrawableIcon(Drawable defaultMarker) { 
     super(boundCenterBottom(defaultMarker)); 

    } 
    public void addOverlay(OverlayItem overlay) { 
     mOverlays.add(overlay); 
     populate(); 
    } 
    @Override 
    protected OverlayItem createItem(int i) { 

     return mOverlays.get(i); 
    } 

    @Override 
    public int size() { 
     return mOverlays.size(); 
    } 

} 
 

que luego utilizo como tal: (GP es el geopunto de la mancha quiero poner la imagen en)

 

DrawableIcon image = new DrawableIcon(this.getResources().getDrawable(ResourceID)); 
image.addOverlay(new OverlayItem(gp, "", "")); 
mapOverlays.add(image); 
 

Entonces, ¿cómo voy a modificar este código para que cuando ResourceID es el ID de una imagen gif animada, la imagen gif reproduzca su animación sobre la vista del mapa?

¡Gracias de antemano!

Respuesta

6

mostrar una animación sobre el mapa se puede utilizar el método de la clase addView MapView. Pero los parámetros de diseño de la vista se deben inicializar con MapView.LayoutParams.

En este caso la vista se moverá automáticamente cuando se desplaza el mapa!

Es tan simple como:

  1. acaba de crear una vista (como ImageView o cualquier otra vista);
  2. inicializar el diseño de vista, crear y pasar MapView.LayoutParams al método de setLayoutParams;
  3. añadir a la vista MapView.

    public static void addAnimationToMap(MapView map, int animationResourceId, GeoPoint geoPoint) { 
    
        final ImageView view = new ImageView(map.getContext()); 
        view.setImageResource(animationResourceId); 
    
        //Post to start animation because it doesn't start if start() method is called in activity OnCreate method. 
        view.post(new Runnable() { 
         @Override 
         public void run() { 
          AnimationDrawable animationDrawable = (AnimationDrawable) view.getDrawable(); 
          animationDrawable.start(); 
         } 
        }); 
    
        map.addView(view); 
    
        MapView.LayoutParams layoutParams = new MapView.LayoutParams(
         MapView.LayoutParams.WRAP_CONTENT, 
         MapView.LayoutParams.WRAP_CONTENT, 
         geoPoint, 
         MapView.LayoutParams.BOTTOM_CENTER); 
        view.setLayoutParams(layoutParams); 
    
    } 
    
+0

puede darle más o código de ejemplo, si he utilizado el mismo código puede agregar muchos puntos de vista a la MapView, – pengwang

+0

Pengwang, sí, se puede utilizar el código muchas veces para agregar muchos puntos de vista. Es similar a agregar una vista a cualquier contenedor, pero cuando agrega una vista a MapView, especifica MapView.LayoutParams con GeoPoint (ubicación) a la que esta vista debe estar limitada. –

+0

fresco, gracias – pengwang