Поместите анимированный GIF в наложение поверх MapView - PullRequest
6 голосов
/ 19 мая 2011

Я вырывал свои волосы, пытаясь заставить эту, казалось бы, простую задачу работать.Мне нужно поместить анимированный 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-изображения, GIF-изображение воспроизводило свою анимацию поверх карты?

Спасибо зазаранее!

1 Ответ

6 голосов
/ 06 октября 2011

Для отображения анимации на карте вы можете использовать метод addView класса MapView. Но параметры макета представления должны быть инициализированы с помощью 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);
    
    }
    
...