Is it possible to have dashed line in the map paths? Can't see any option about it in the official Google static map page.
Asked
Active
Viewed 745 times
2
-
2It might be a feature request for Static Maps API. Feel free to file it in Google [issue tracker](https://issuetracker.google.com/issues/new?component=188843&template=787424). – xomena Mar 02 '18 at 11:29
1 Answers
1
As workaround you can draw dashed line like in example:
List<PatternItem> pattern = Arrays.<PatternItem>asList(new Dash(30), new Gap(20));
mPolyline.setPattern(pattern);
over MapView in Light Mode on background and make snapshot of it for getting map bitmap, like in that answer:
public class MainActivity extends AppCompatActivity {
private static final String MAP_VIEW_BUNDLE_KEY = "MapViewBundleKey";
static final LatLng KYIV = new LatLng(50.450311, 30.523730);
private ImageView mImageView;
private MapView mMapView;
// dimensions of "static map" image
private int mMapWidth = 600;
private int mMapHeight = 800;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mImageView = (ImageView) findViewById(R.id.image_view);
Bundle mapViewBundle = null;
if (savedInstanceState != null) {
mapViewBundle = savedInstanceState.getBundle(MAP_VIEW_BUNDLE_KEY);
}
GoogleMapOptions options = new GoogleMapOptions()
.compassEnabled(false)
.mapToolbarEnabled(false)
.camera(CameraPosition.fromLatLngZoom(KYIV,15))
.liteMode(true);
mMapView = new MapView(this, options);
mMapView.onCreate(mapViewBundle);
mMapView.getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap googleMap) {
// draw dashed path here:
List<LatLng> sourcePoints = new ArrayList<>();
sourcePoints.add(new LatLng(50.440311, 30.523730));
sourcePoints.add(new LatLng(50.460411, 30.523930));
PolylineOptions polyLineOptions = new PolylineOptions();
polyLineOptions.addAll(sourcePoints);
polyLineOptions.width(10);
polyLineOptions.color(Color.RED);
Polyline polyline = googleMap.addPolyline(polyLineOptions);
List<PatternItem> pattern = Arrays.<PatternItem>asList(new Dash(30), new Gap(20));
polyline.setPattern(pattern);
// set map size in pixels and initiate image loading
mMapView.measure(View.MeasureSpec.makeMeasureSpec(mMapWidth, View.MeasureSpec.EXACTLY),
View.MeasureSpec.makeMeasureSpec(mMapHeight, View.MeasureSpec.EXACTLY));
mMapView.layout(0, 0, mMapWidth, mMapHeight);
googleMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {
@Override
public void onMapLoaded() {
mMapView.setDrawingCacheEnabled(true);
mMapView.measure(View.MeasureSpec.makeMeasureSpec(mMapWidth, View.MeasureSpec.EXACTLY),
View.MeasureSpec.makeMeasureSpec(mMapHeight, View.MeasureSpec.EXACTLY));
mMapView.layout(0, 0, mMapWidth, mMapHeight);
mMapView.buildDrawingCache(true);
// Bitmap b is your "static map"
Bitmap b = Bitmap.createBitmap(mMapView.getDrawingCache());
mMapView.setDrawingCacheEnabled(false);
mImageView.setImageBitmap(b);
}
});
}
});
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Bundle mapViewBundle = outState.getBundle(MAP_VIEW_BUNDLE_KEY);
if (mapViewBundle == null) {
mapViewBundle = new Bundle();
outState.putBundle(MAP_VIEW_BUNDLE_KEY, mapViewBundle);
}
}
}

Andrii Omelchenko
- 13,183
- 12
- 43
- 79