Анимиран информационен прозорец в 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“ и не съм сигурен дали това има нещо общо с някои от разликите между V1 и V2.

Ще добавя това, което имам досега, само като справка. Опитах се да копирам кода от другия проект и да се опитам да го модифицирам, така че да работи в този, но не успях дори да го компилирам.

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
В крайна сметка използвах Handler, за да анимирам ръчно изгледа с помощта на полета. Донякъде е срамно да го правя по този начин, но, хей, работи. Благодаря - person h4lc0n; 25.04.2013