Анимированное информационное окно в Google Maps v2

Недавно я спросил о применении анимации к всплывающему окну маркера (информационному окну), и мне объяснили, почему это невозможно:

Примечание. Отображаемое информационное окно не является просмотром в реальном времени. Представление визуализируется как изображение (с использованием View.draw(Canvas)) в момент его возврата. Это означает, что любые последующие изменения вида не будут отражаться в информационном окне на карте. Чтобы обновить информационное окно позже (например, после загрузки изображения), вызовите showInfoWindow(). Кроме того, информационное окно не будет учитывать какую-либо интерактивность, типичную для обычного просмотра, такую ​​как события касания или жестов. Однако вы можете прослушивать общее событие щелчка во всем информационном окне, как описано в разделе ниже.

Изучив еще немного, я нашел проект, использующий V1, который вручную создает представление на позиции маркера. Для этого другой парень сделал что-то вроде этого:

public void showPopup(View view, GeoPoint point, boolean centerPopup) {

    removeAllViews();

    MapView.LayoutParams lp = new MapView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT,
            point,
            Utils.dipsToPixels(0.0f, mContext),
            Utils.dipsToPixels(-12.0f, mContext),
            MapView.LayoutParams.BOTTOM_CENTER);

    if (centerPopup) {
        getController().animateTo(point);
        mIgnoreNextChangeEvent = true;
    }

    View balloon = mInflater.inflate(R.layout.balloon, null);
    balloon.setLayoutParams(lp);

    ((ViewGroup) balloon.findViewById(R.id.balloonBody)).addView(view);

    balloon.startAnimation(AnimationUtils.loadAnimation(mContext, R.anim.bounce_in));
    addView(balloon);
}

Поэтому он вручную создает всплывающее окно и прикрепляет его к MapView.

Я пытался эмулировать то же самое, используя V2, но мне это не удалось, и я даже не знаю, возможно ли это вообще. Например, я использую «GoogleMap» вместо «MapView», и я не уверен, что это как-то связано с некоторыми различиями между версиями 1 и 2.

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

public boolean onMarkerClick(Marker marker) {
    map.removeAllViews();

    MapView.LayoutParams lp = new MapView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT,
            marker.getPosition(),
            Tools.dipsToPixels(0.0f, this),
            Tools.dipsToPixels(-12.0f, this),
            MapView.LayoutParams.BOTTOM_CENTER);

    if (centerPopup) {
        getController().animateTo(point);
        mIgnoreNextChangeEvent = true;
    }

    View balloon = mInflater.inflate(R.layout.balloon, null);
    balloon.setLayoutParams(lp);

    ((ViewGroup) balloon.findViewById(R.id.balloonBody)).addView(view);

    balloon.startAnimation(AnimationUtils.loadAnimation(mContext, R.anim.bounce_in));
    addView(balloon);

    return false;
}

person h4lc0n    schedule 23.04.2013    source источник


Ответы (1)


Вы не можете синхронизировать карту прокрутки с любым представлением, которое может быть над ней, и даже если вы выполнили такое решение, оно будет выглядеть медленным.

Вы пробовали этот обходной путь: https://stackoverflow.com/a/16147630/2183804?

person MaciejGórski    schedule 23.04.2013
comment
Нет, но я могу в конечном итоге попробовать. Я все еще удивлен, что нет более простого решения для чего-то подобного ... Я уверен, что многие люди хотели бы иметь возможность анимировать информационные окна, чтобы дать пользователю лучшее ощущение. - person h4lc0n; 23.04.2013
comment
Да. В Google Maps Android API v2 отсутствует множество приятных анимаций. Возможно, рано или поздно они добавят приятные вещи, такие как анимация появления и исчезновения информационного окна / маркера или изменение положения маркера. - person MaciejGórski; 23.04.2013
comment
В итоге я использовал обработчик для ручной анимации представления с использованием полей. Немного позорно делать это таким образом, но, эй, это работает. Спасибо - person h4lc0n; 25.04.2013