docs: @Override
  	public void draw(Canvas c, Projection projection) {
  
  		final double zoomLevel = projection.getZoomLevel();
  
  		if (zoomLevel < minZoom) {
  			return;
  		}
  		final Rect rect = projection.getIntrinsicScreenRect();
  		int _screenWidth = rect.width();
  		int _screenHeight = rect.height();
  		boolean screenSizeChanged = _screenHeight!=screenHeight || _screenWidth != screenWidth;
  		screenHeight = _screenHeight;
  		screenWidth = _screenWidth;
  		final IGeoPoint center = projection.fromPixels(screenWidth / 2, screenHeight / 2, null);
  		if (zoomLevel != lastZoomLevel || center.getLatitude() != lastLatitude || screenSizeChanged) {
  			lastZoomLevel = zoomLevel;
  			lastLatitude = center.getLatitude();
  			rebuildBarPath(projection);
  		}
  
  		int offsetX = xOffset;
  		int offsetY = yOffset;
  		if (alignBottom) offsetY *=-1;
  		if (alignRight ) offsetX *=-1;
  		if (centred && latitudeBar)
  			offsetX += -latitudeBarRect.width() / 2;
  		if (centred && longitudeBar)
  			offsetY += -longitudeBarRect.height() / 2;
  
  		projection.save(c, false, true);
  		c.translate(offsetX, offsetY);
  
  		if (latitudeBar && bgPaint != null)
  			c.drawRect(latitudeBarRect, bgPaint);
  		if (longitudeBar && bgPaint != null) {
  			// Don't draw on top of latitude background...
  			int offsetTop = latitudeBar ? latitudeBarRect.height() : 0;
  			c.drawRect(longitudeBarRect.left, longitudeBarRect.top + offsetTop,
  					longitudeBarRect.right, longitudeBarRect.bottom, bgPaint);
  		}
  		c.drawPath(barPath, barPaint);
  		if (latitudeBar) {
  			drawLatitudeText(c, projection);
  		}
  		if (longitudeBar) {
  			drawLongitudeText(c, projection);
  		}
  		projection.restore(c, true);
  	}