将动画GIF叠加到MapView上

时间:2011-05-19 01:27:01

标签: android android-mapview

我一直在试着让这个看似简单的任务工作。 我需要在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是我想要放置图像的地点的地点)


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

那么我将如何修改此代码,以便当ResourceID是动画gif图像的ID时,gif图像会在mapview上播放动画?

提前致谢!

1 个答案:

答案 0 :(得分: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);
    
    }