Перемещение значков на Android MapView - PullRequest
10 голосов
/ 26 сентября 2010

Я работаю над приложением, которое отображает местоположение движущихся объектов в Google MapView.Мне нужен способ обновить положение значков, представляющих элементы (а также изменить внешний вид значков каждые две секунды при поступлении обновленных данных).

В настоящее время у меня есть активность в приложении, котороерасширяет MapActivity.На это я наложил статическое наложение, которое рисует некоторые линии на карте, и наложение ItemizedOver, которое рисует статический значок.

Существует метод draw (), который утверждает, что используется анимированными наложениями, но переопределение его для выполнения моих анимаций по-прежнему ничего не делает анимированным.

Нужно ли указывать приложению анимировать мое наложение или мне нужно использовать другой тип наложения?

Ответы [ 4 ]

4 голосов
/ 02 октября 2010

Есть две вещи, которые я имею в виду по поводу вашей проблемы.

Во-первых, вы рассматривали возможность использования invalidate () в MapView для принудительной перерисовки?Это, вероятно, не самое эффективное решение, но оно должно, по крайней мере, дать вам то, с чем вы можете работать.

Во-вторых, вы можете обновить элементы на карте, снова вызвав игру.Вот пример .

1 голос
/ 27 октября 2010

Использование встроенных возможностей MapView и Overlays для рисования анимации, скорее всего, убьет вашу производительность. Мое предложение:

1) Объединить MapView с другим View. MapView предоставит вам необходимые координаты экрана, а другой вид будет служить основой для анимации. Оба вида должны занимать одинаковые позиции на экране (используйте структуру кадра);

2) Как только вы получите позиции маркера карты, который хотите анимировать - удалите его с карты и начните выполнять анимацию движений маркера, используя второй вид. Здесь вы можете использовать специализированные классы анимации для Android (т.е. Animation, AnimationUtil, AnimationSet)

3) Как только вы покончили с анимацией - добавьте маркер в наложение карты, теперь в его новой позиции и лишите законной силы наложение

Возможно, может быть более оптимальный подход (т. Е. Использовать анимацию непосредственно на холсте MapView), но суть в том, что вы должны использовать специальный механизм анимации для предотвращения проблем с производительностью.

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

В качестве опции для отображения анимации вы можете использовать метод addView класса MapView. Это так же просто, как:

  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 голосов
/ 21 октября 2010

Я все еще довольно новичок во всем этом Android Stuff, но на днях я читал Android Unleashed 2nd Ed (версия программы раннего доступа), где он охватывает анимации ... что звучит как вещь. *

Animation anim = new TranslateAnimation( startX, stopX, startY, stopY );
anim.setDuration( 2000 /* 2 seconds */ );
anim.init( overlayWid, overlayHei, parentWid, parentHei )

myItemizedOverlay.startAnimation( anim );

Обратите внимание, что на самом деле я не пробовал ничего подобного, но именно поэтому книга / JavaDoc заставляет меня поверить, что это сработает. Вам, вероятно, нужно будет позвонить до startAnimation (). Как я уже сказал ... вряд ли моя область знаний (пока!).

Я не думаю, что при таком подходе вам вообще придется связываться с аннулированием.

...