如果您有List,我將分享沿路徑移動標記的解決方案。位圖將沿着使用LatLng列表的路徑移動。在谷歌地圖中沿着路徑動畫一輛車(標記)android
9
A
回答
13
public static void setAnimation(GoogleMap myMap, final List<LatLng> directionPoint, final Bitmap bitmap) {
Marker marker = myMap.addMarker(new MarkerOptions()
.icon(BitmapDescriptorFactory.fromBitmap(bitmap))
.position(directionPoint.get(0))
.flat(true));
myMap.animateCamera(CameraUpdateFactory.newLatLngZoom(directionPoint.get(0), 10));
animateMarker(myMap, marker, directionPoint, false);
}
private static void animateMarker(GoogleMap myMap, final Marker marker, final List<LatLng> directionPoint,
final boolean hideMarker) {
final Handler handler = new Handler();
final long start = SystemClock.uptimeMillis();
Projection proj = myMap.getProjection();
final long duration = 30000;
final Interpolator interpolator = new LinearInterpolator();
handler.post(new Runnable() {
int i = 0;
@Override
public void run() {
long elapsed = SystemClock.uptimeMillis() - start;
float t = interpolator.getInterpolation((float) elapsed
/duration);
if (i < directionPoint.size())
marker.setPosition(directionPoint.get(i));
i++;
if (t < 1.0) {
// Post again 16ms later.
handler.postDelayed(this, 16);
} else {
if (hideMarker) {
marker.setVisible(false);
} else {
marker.setVisible(true);
}
}
}
});
}
+0
您能向我解釋List directionPoint包含的內容嗎?謝謝 –
+1
它的列表LatLng從源到目的地汽車(標記)需要沿着地圖動畫 – Nikhil
+0
我正在基於從另一個應用程序的實時位置更新動畫汽車位置。那麼當我只有當前位置時,如何才能獲得LatLng列表?有什麼辦法可以延遲應用程序的繪製以收集少量更新,然後將所有內容添加到List對象並將其傳遞給您的方法,並繼續重複,直到最終目的地? –
1
我也完成了這個相同的場景,這裏給出的代碼。
public class MapsActivity extends FragmentActivity implements OnMapReadyCallback, LocationListener {
private static Location oldLocation;
private GoogleMap mMap;
private LocationManager locationManager;
private Marker marker;
private static float angle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
Toast.makeText(this, "Location permissioin in not enable", Toast.LENGTH_SHORT).show();
return;
}
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 2, 0, this);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
}
@Override
public void onLocationChanged(Location location) {
locationUpdate(location);
if (oldLocation != null) {
double bearing = angleFromCoordinate(oldLocation.getLatitude(), oldLocation.getLongitude(), location.getLatitude(), location.getLongitude());
changeMarkerPosition(bearing);
}
oldLocation = location;
}
private void locationUpdate(Location location) {
LatLng latLng = new LatLng((location.getLatitude()), (location.getLongitude()));
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(latLng);
markerOptions.title("Current Position");
markerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.car_right));
mMap.clear();
marker = mMap.addMarker(markerOptions);
CameraPosition position = CameraPosition.builder()
.target(new LatLng(location.getLatitude(), location.getLongitude()))
.zoom(19)
.tilt(30)
.build();
mMap.animateCamera(CameraUpdateFactory.newCameraPosition(position));
}
private void changeMarkerPosition(double position) {
float direction = (float) position;
Log.e("LocationBearing", "" + direction);
if (direction==360.0){
//default
marker.setRotation(angle);
}else {
marker.setRotation(direction);
angle=direction;
}
}
@Override
public void onStatusChanged(String provider, int status, Bundle extras) {
}
@Override
public void onProviderEnabled(String provider) {
}
@Override
public void onProviderDisabled(String provider) {
}
private double angleFromCoordinate(double lat1, double long1, double lat2,
double long2) {
double dLon = (long2 - long1);
double y = Math.sin(dLon) * Math.cos(lat2);
double x = Math.cos(lat1) * Math.sin(lat2) - Math.sin(lat1)
* Math.cos(lat2) * Math.cos(dLon);
double brng = Math.atan2(x, y);
brng = Math.toDegrees(brng);
brng = (brng + 360) % 360;
brng = 360 - brng;
return brng;
}}
希望對您有所幫助。
相關問題
- 1. 在谷歌地圖上沿着道路畫一條線
- 2. 谷歌ortools - 車輛路徑PB
- 3. 沿着路線在地圖框中移動標記android
- 4. 沿着盆景路徑動畫動畫
- 5. 谷歌地圖中的動畫標記
- 6. 在Android上沿着路徑動畫圖像?
- 7. 谷歌地圖動畫標記移動
- 8. 谷歌地圖在Android上繪製動畫路徑
- 9. 谷歌地圖路徑跟蹤與Android中的標記點
- 10. 在谷歌地圖中留下一輛車的蹤跡API
- 11. 如何沿着路徑製作動畫
- 12. 沿着動畫路徑的SVG:animateMotion
- 13. raphaelJS 2.1沿着路徑動畫
- 14. 沿着路徑動畫改變起點
- 15. 谷歌地圖SVG標記動畫
- 16. 谷歌地圖標記動畫,KnockoutJs
- 17. 沿着圓形路徑旋轉圖標/視圖,滾動 - Android
- 18. android谷歌地圖標記
- 19. 谷歌地圖旋轉標記/汽車圖標 - Android
- 20. 標記抖動添加動畫谷歌地圖android
- 21. Android的谷歌地圖動態標記
- 22. QGraphicsItem沿着路徑移動
- 23. 沿着路徑滾動Paper.js
- 24. 沿着路徑拖動snap.svg
- 25. 沿着曲線路徑在背景中移動的圖像android
- 26. iPhone UIImageView與動畫圖像需要沿着路徑移動
- 27. 谷歌地圖顯示正確方位的所有車輛標記
- 28. 在谷歌地圖api中刪除運輸路線的車輛信息
- 29. 隨着用戶移動沿着地圖移動標記
- 30. Android谷歌地圖標記周圍的脈衝環動畫
您的帖子應該是**問題的一種形式** – Androiderson
用於動畫多段線路線github.com/amalChandran/google-maps-route-animation – amalBit