Анимация типа GIF для маркера в Google Map API ANDROID

Я хочу добиться анимации маркера, такой как анимация GIF. У меня есть два изображения, которые должны мигать одновременно. Я не нашел ничего, что могло бы достичь этого в Android. Я пытаюсь сделать это, создав обработчик, который запускается каждую секунду, и я пытаюсь установить значок для маркера. Но это не работает. Пожалуйста, направьте меня в правильном направлении.

мой код на данный момент выглядит следующим образом.

  Handler handler = new Handler();
  Boolean marker_color_bool = true;

//adding marker and sending the marker instance to marker_animation() method where handler is called.

MarkerOptions marker = new MarkerOptions()
                .title(delivery_center_name)
                .snippet("This is the " + delivery_center_name + " location")
                .position(location)
                .icon(BitmapDescriptorFactory.fromResource(R.drawable.red_marker));

        google_map.addMarker(marker);

        marker_animation(marker);

метод marker_animation()

 private final int ONE_SECONDS = 1000;
public void marker_animation(final MarkerOptions marker ) {

    handler.postDelayed(new Runnable() {
        public void run() {

            Log.e("running",""+marker_color_bool);

            if(marker_color_bool == true)
            {

                marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.green_marker));
                marker_color_bool = false;
            }
            else
            {
                marker.icon(BitmapDescriptorFactory.fromResource(R.drawable.red_marker));
                marker_color_bool = true;
            }

            handler.postDelayed(this, ONE_SECONDS);
        }
    }, ONE_SECONDS);
}

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


comment
Было бы лучше, если бы люди указали в комментариях причину, по которой вопрос был отклонен. Чтобы я, как и другие люди, могли понять и научиться эффективно задавать вопрос. Спасибо..:-)   -  person Sandeep R    schedule 22.09.2015
comment
Можете ли вы опубликовать свое решение этого ответа?   -  person Pablo Cegarra    schedule 06.02.2017
comment
@PabloCegarra Я использую маркер вместо параметров маркера. Маркер = новый маркер(). а также он имеет setIcon, который меняет значок в обработчике анимации из приведенного выше кода.   -  person Sandeep R    schedule 25.10.2017
comment
Вы нашли решение?   -  person Regis_AG    schedule 02.11.2017
comment
@Regis_AG да, найдите приведенный выше комментарий к моему решению.   -  person Sandeep R    schedule 02.04.2018


Ответы (1)


Пожалуйста, помогите мне, что я делаю неправильно

Вы изменяете объект, который больше не используется. Как только вызывается addMarker(), объект MarkerOptions больше не имеет значения, но это то, что вы изменяете с помощью своей логики postDelayed().

(Кстати, вам не нужен Handler, так как postDelayed() доступен на любом View)

addMarker() возвращает Marker. Вам нужно будет работать с этим Marker, чтобы повлиять на ваши изменения через setIcon().

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

person CommonsWare    schedule 22.09.2015
comment
да, наконец, я решил это, используя маркер вместо markeroptions, а также marker.seticon . - person Sandeep R; 22.09.2015
comment
Мне нужен индикатор загрузки внутри этого изображения маркера, а мое изображение маркера является пользовательским изображением, как я могу это сделать? - person neena; 07.04.2016
comment
@neena: Если под индикатором загрузки вы имеете в виду что-то анимированное, это не поддерживается. - person CommonsWare; 07.04.2016
comment
да, мне нужна анимация, сообщающая о загрузке, если она не поддерживается, как я могу это сделать? - person neena; 08.04.2016
comment
@neena: Я думаю, ваш индикатор прогресса должен быть где-то еще. - person CommonsWare; 08.04.2016