Intereting Posts
Как правильно выводить данные JSON с помощью PHP Андроид с использованием SurfaceView и Thread Android Espresso: как я могу протестировать определенный фрагмент при выполнении одного действия для нескольких фрагментарных архитектур Android LocationServices.GeofencingApi пример использования Прокрутка ListView изменяет все: от белого до черного Как получить доступ к html-контенту AccessibilityNodeInfo элемента WebView с помощью Accessibility Service в Android? Добавить событие Calendar в Android из сети .vcs загрузить Как «хорошо» – это эмулятор Android? Android: как разделить код между проектами, подписанными с тем же сертификатом Проблемы с Sqlite с HTC Desire HD Android: конвертирование между строками, SpannedStrings и Spannablestrings Обновите серию GSON Date из строки json в java.util.date Сохранение пользовательского интерфейса при изменении ориентации – onSaveInstanceState не работает, как ожидалось, если сохранить фрагмент Двунаправленная операция поиска Доступность Отсутствует contentDescription атрибут на изображении, как удалить это предупреждение?

Как плавно продолжать перемещать маркер текущего местоположения в Google Maps v2 android

Я поместил маркер для своего местоположения. Я хотел бы плавно перемещать маркер, как приложение Google maps. Синий круг движется очень плавно, когда я продолжаю двигаться в своей машине. Я хотел бы реализовать то же самое для своего приложения. Как это реализовать в моем приложении?

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

Вот что я наделал:

googleMap.setMyLocationEnabled(true); 

Поэтому метод onMyLocationChange вызывается автоматически:

 @Override public void onMyLocationChange(Location location) { curlat = location.getLatitude(); curlong = location.getLongitude(); if (markermylocation != null) { markermylocation.remove(); } curlat = location.getLatitude(); curlong = location.getLongitude(); myLocation(curlat, curlong, username, imageURL, ZOOMVALUE); } 

В методе mylocaiton:

 private void myLocation(double lat, double lng, String name, String url, float zoom) { if(firsttime == 1) { LatLng ll = new LatLng(lat,lng); CameraUpdate update = CameraUpdateFactory.newLatLngZoom(ll, zoom); googleMap.animateCamera(update); firsttime = 0; } final String uname = name; curlat = lat; curlong = lng; LatLng position = new LatLng(curlat, curlong); markerOptionsmylocaiton = new MarkerOptions().position(position).icon(BitmapDescriptorFactory.fromBitmap(icon)).title(uname).anchor(0.5f, 1f); markermylocation = googleMap.addMarker(markerOptionsmylocaiton); LatLng latlang = new LatLng(curlat, curlong); animateMarker(markermylocation, latlang, false); } 

Поэтому каждый раз, когда mylocation называется маркером, он удаляется и вызывает метод mylocation, а затем создает маркер в новом постулате. Вместо этого я хотел бы получить плавный переход маркера, например, карты Google? Как это реализовать?

Обновить:

Поработав пару раз на этом: я пришел к этому коду наконец, но тогда мои маркеры не появляются:

Я использую метод ниже и каждый раз вызываю его в методе myLocation.

 public void animateMarker(final Marker marker, final LatLng toPosition, final boolean hideMarker) { final Handler handler = new Handler(); final long start = SystemClock.uptimeMillis(); Projection proj = googleMap.getProjection(); Point startPoint = proj.toScreenLocation(marker.getPosition()); final LatLng startLatLng = proj.fromScreenLocation(startPoint); final long duration = 500; final Interpolator interpolator = new LinearInterpolator(); handler.post(new Runnable() { @Override public void run() { long elapsed = SystemClock.uptimeMillis() - start; float t = interpolator.getInterpolation((float) elapsed / duration); double lng = t * toPosition.longitude + (1 - t) * startLatLng.longitude; double lat = t * toPosition.latitude + (1 - t) * startLatLng.latitude; marker.setPosition(new LatLng(lat, lng)); if (t < 1.0) { // Post again 16ms later. handler.postDelayed(this, 16); } else { if (hideMarker) { marker.setVisible(false); } else { marker.setVisible(true); } } } }); } 

Благодаря!

Solutions Collecting From Web of "Как плавно продолжать перемещать маркер текущего местоположения в Google Maps v2 android"

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

 final Handler handler = new Handler(); final long start = SystemClock.uptimeMillis(); final long duration = 2500; final Interpolator interpolator = new BounceInterpolator(); marker.setVisible(true); handler.post(new Runnable() { @Override public void run() { long elapsed = SystemClock.uptimeMillis() - start; float t = Math.max( 1 - interpolator.getInterpolation((float) elapsed / duration), 0); marker.setAnchor(0.5f, 1.0f + 6 * t); marker.setPosition(latlng) if (t > 0.0) { // Post again 16ms later. handler.postDelayed(this, 16); } } });