Как показать мигающий значок на карте Google - PullRequest
5 голосов
/ 18 июля 2011

Я хочу показать текущее местоположение пользователя на карте Google. У меня все хорошо работает. Я просто использую маркер, чтобы показать текущее местоположение на карте. Теперь я хочу, чтобы этот маркер мерцал, как в оригинальном приложении Google Maps на Android Mobile. Я думаю, что я должен использовать анимацию для этой цели, но я не знаю, как ее использовать. Я ищу его в Интернете, но я не получаю никаких решений. Кто-нибудь, помогите мне, пожалуйста .....

Ответы [ 3 ]

4 голосов
/ 18 июля 2011

Значок Android GPS в строке состояния мигает с использованием приведенной ниже логики. Держите две раскладки, одну с тусклым изображением и одну с ярким изображением. Замените их через определенное время, и изображение будет выглядеть как мигающее.

<animation-list
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot="false">
    <item android:drawable="@drawable/dull" android:duration="10000" />
    <item android:drawable="@drawable/bright" android:duration="10000" />
</animation-list>
0 голосов
/ 29 января 2018

Поскольку сам маркер не является видом, кажется, что использование анимационной структуры не представляется возможным.

Таким образом, следующий подход (хотя и грубый по краям) работает, хотя в интересах сохранения его на месте:- он не останавливается (просто добавьте флаг, чтобы проверить, установлен ли он где-то еще) - вы захотите отменить его при следующем щелчке маркера, чтобы избежать многократного запуска одного и того же маркера

Предположим, у вас есть ссылка на маркер(например, используйте обратный вызов 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);

Другие возможные свойства для манипуляции (или комбинации):- опорная точка - это заставит ее покачиваться, если сделано аккуратно - видимость - заставит ее появиться / исчезнуть (вероятно, раздражает)

0 голосов
/ 18 июля 2011

это именно то, что вам нужно

http://www.wiseandroid.com/post/2010/08/10/Making-a-simple-custom-Android-UI-animation.aspx

Надеюсь, вы понимаете код. обратите внимание на это утверждение:

t.setAlpha(Math.abs(FloatMath.cos(period)));

Я думаю, вы должны отредактировать его, чтобы оно изменилось с 1 на 0, затем с 0 на 1 ... и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...