Поскольку сам маркер не является видом, кажется, что использование анимационной структуры не представляется возможным.
Таким образом, следующий подход (хотя и грубый по краям) работает, хотя в интересах сохранения его на месте:- он не останавливается (просто добавьте флаг, чтобы проверить, установлен ли он где-то еще) - вы захотите отменить его при следующем щелчке маркера, чтобы избежать многократного запуска одного и того же маркера
Предположим, у вас есть ссылка на маркер(например, используйте обратный вызов onMarkerClick), и вы выполняете в потоке пользовательского интерфейса.Используйте настройку альфа-маркеров и увеличивайте ее (с шагом 0,1 в этом примере) с 1,0 до нижнего предела (в этом примере 0,5)
// Assume I have a marker reference 'm', e.g. from a onMarkerClick
// .. in context of onMarkerClick for example
// change the '500' (millis) to adjust the blinking rate.
new Handler().postDelayed(new AnimateMarker(m, 0.5F, 0.1F), 500);
... и в других местах в классе определите
public class AnimateMarker implements Runnable {
float tgtalpha;
float delta;
private Marker m;
public AnimateMarker (Marker m, float tgt, float delta) {
this.m = m;
this.tgtalpha = tgt;
this.delta = delta;
}
@Override
public void run() {
float a = m.getAlpha();
if (a <= tgtalpha || a >= 1.0F) {
delta *= -1.0F;
}
a += delta;
m.setAlpha(a);
new Handler().postDelayed(new AnimateMarker(m, tgtalpha, delta), 500);
}
}
Обратите внимание, что вы можете делать разные вещи в run (), например, "вращать" маркер, используя свойство вращения:
// modified snippet of 'run' method
float a = m.getRotation();
if (a >= 350.0) {
a = 0;
} else {
a += 10.0F;
}
m.setRotation(a);
Другие возможные свойства для манипуляции (или комбинации):- опорная точка - это заставит ее покачиваться, если сделано аккуратно - видимость - заставит ее появиться / исчезнуть (вероятно, раздражает)