Intereting Posts
Выделите текст выбранной вкладки другим цветом с помощью ViewPagerIndicator Android – ImageView накладывает еще один ImageView Как получить текущий контекст активности переднего плана в android? Как установить ширину / высоту для любого виджета с помощью темы в Android Файл keystore по умолчанию не существует? Добавьте файлы .java в качестве исходных файлов java в Android Studio, чтобы удалить красный круг с помощью «J» на них. После обновления Android Studio до версии 1.3.0 я получаю «NDK-интеграция устарела в текущем плагине». Ошибка Как изменить образ homeAsUpIndicator в теме по умолчанию Theme.Holo.Light Создайте список измененных файлов / каталогов / etc. Использование git между двумя тегами Метод getSupportFragmentManager () не поддерживается Android: как добавить приложение в список «Поделиться через» для фотоаппарата Android AlarmManager в Broadcastreceiver Отладка студии Android перестает работать (OSx / Samsung Galaxy S5) Как удалить строки из скомпилированного двоичного файла (.so) Android Eclipse Ошибка выполнения aapt: код возврата 139

Как плавно продолжать перемещать маркер текущего местоположения в 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); } } });