Наскоро попитах за прилагане на анимация към изскачащ прозорец на маркер (информационен прозорец) и ми беше обяснено защо това не е възможно:
Забележка: Изчертаният информационен прозорец не е изглед на живо. Изгледът се изобразява като изображение (използвайки
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;
}