2011-05-19 69 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