在MapView上叠加动态GIF图像

6

我很费劲地试图完成这个看似简单的任务。我需要在地图视图上放置一个动态gif图像叠加。

我有以下代码:

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

然而,我现在如何将其放在一个覆盖层上并将其投放到地图视图上呢?
目前,为了放置静态图像,我有以下代码:
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图像会在地图视图上播放它的动画?
提前感谢!
1个回答

6

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

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

操作非常简单:

  1. just create a view (like ImageView or any other View);
  2. initialize the view layout, create and pass MapView.LayoutParams to setLayoutParams method;
  3. add the view to 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);
    
    }
    

你能否提供更多的代码或示例?如果我使用相同的代码,是否可以将多个视图添加到地图视图中? - pengwang
朋旺,是的,你可以使用代码多次添加多个视图。这类似于向任何容器添加视图,但是当你向MapView添加视图时,你需要指定与此视图绑定的GeoPoint(位置)的MapView.LayoutParams。 - Igor Zubchenok
正如你从我的回答中看到的那样,只有在Activity onCreate执行期间添加带动画的ImageView时,才必须发出animationDrawable.start()。但是,如果您随后向地图视图添加新的动画,则可以在调用view.setImageResource()之后立即调用animationDrawable.start()。我希望这很清楚。 - Igor Zubchenok

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接