В этом коротком ролике маркер прогресса (серия из 8 окружностей вокруг маркера) продвигается на один заполненный круг, обозначающий прогресс - в зависимости от необходимости расчета прогресса (в данном случае 5 обновлений местоположения, но, скорее всего, будет пройдено расстояние).
Значок маркера - это все (автомобиль + маркер + круг + прогресс) и значок дублирован в 9 файлах с измененными кругами прогресса.
Я могу опубликовать детали, если это представляет интерес, но сводка такова:
- Создайте столько изображений маркеров, сколько имеется состояний прогресса (в данном примере 9)
- Периодически обновляйте прогресс, меняя значок маркера, соответствующий значку progress (с шагом 1/8 в этом примере)
- Мигание выполняется с использованием задержки обработчика и по существу переключается между icon0 (кружки не заполнены) и текущим значком (на основе вычисления прогресса).
- маркер перемещается вместе с местоположением в этом примере, просто используя
.setPosition()
.
Вот реализация обработчика для предоставленного примера:
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
boolean onOff = false;
@Override
public void run() {
// imageId is set in the onLocationChanged based on 'progress'
// determination - 0/8 complete; 1/8 complete...
int currentImageId = imageId;
// icons is an array list populated at initialization with
// BitmapDescriptors from resources - one for each progress
// fraction (0 - 8).
BitmapDescriptor currentIcon = icons.get(currentImageId);
// Flashing results from using the "0-progress" indicator icon
// which is at index 0.
BitmapDescriptor offIcon = icons.get(0);
if (onOff) {
marker1.setIcon(offIcon);
} else {
marker1.setIcon(currentIcon);
}
onOff = !onOff;
// restart handler timer.
handler.postDelayed(this, 500);
}
}, 100);
Инициализация списка значков выглядит следующим образом:
// repeat for all progress images
final BitmapDescriptor icon0 = BitmapDescriptorFactory.fromResource(R.drawable.car0);
// and add to list
final ArrayList<BitmapDescriptor> icons = new ArrayList<>();
// repeat for all progress images
icons.add(icon0);
Настройка происходит в " определение прогресса "- если вы путешествуете по маршруту, тогда в onLocationChanged
вычисляется коэффициент завершения пути и применяется к максимальному количеству изображений для получения вышеуказанного imageId
. Например:
int imageId = pathCompleteRatio * maxImages;
Видео 