2011-05-19 114 views
6

我一直在拉我的头发试图让这个看似简单的任务工作。 我需要将一个动画gif放在一个叠加在一个mapview上。把动画GIF覆盖在地图上覆盖

我有以下代码:

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

但是我怎么现在突然在覆盖扔过来的MapView?

目前,把静态图像我有这样的:

 

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(); 
    } 

} 
 

然后我这样使用:(GP是我想要把图像中的光斑的GeoPoint)

 

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

那么我该如何去修改这段代码,以便当ResourceID是一个动画gif图像的ID时,gif图像将在mapview上播放它的动画?

提前致谢!

回答

6

要在地图上显示动画,可以使用MapView类的addView方法。但视图的布局参数必须用MapView.LayoutParams初始化。

在这种情况下,当您滚动地图时,视图会自动移动!

它是简单的:

  1. 只是创建一个视图(如ImageView的或任何其它视图);
  2. 初始化视图布局,创建并传递MapView.LayoutParams到setLayoutParams方法;
  3. 将视图添加到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

你可以给更多的代码或例子,如果我使用相同的代码可以添加许多意见的MapView, – pengwang 2011-10-13 05:57:48

+0

pengwang,是的,你可以使用代码多次添加很多意见。这与向任何容器添加视图相似,但是当您向MapView添加视图时,可以指定MapView.LayoutParams与该视图应该绑定到的GeoPoint(位置)。 – 2011-10-18 11:57:22

+0

很酷,谢谢 – pengwang 2011-10-18 11:57:55