MyLocation.java

 1package eu.siacs.conversations.ui.widget;
 2
 3import android.annotation.TargetApi;
 4import android.content.Context;
 5import android.graphics.Bitmap;
 6import android.graphics.Canvas;
 7import android.graphics.Paint;
 8import android.graphics.Point;
 9import android.location.Location;
10import android.os.Build;
11import android.support.v4.content.ContextCompat;
12
13import org.osmdroid.util.GeoPoint;
14import org.osmdroid.util.TileSystem;
15import org.osmdroid.views.MapView;
16import org.osmdroid.views.overlay.mylocation.SimpleLocationOverlay;
17
18import eu.siacs.conversations.Config;
19import eu.siacs.conversations.R;
20
21public class MyLocation extends SimpleLocationOverlay {
22	private final GeoPoint position;
23	private final float accuracy;
24	private final Point mapCenterPoint;
25	private final Paint fill;
26	private final Paint outline;
27
28	public MyLocation(final Context ctx, final Bitmap icon, final Location position) {
29		super(icon);
30		this.mapCenterPoint = new Point();
31		this.fill = new Paint(Paint.ANTI_ALIAS_FLAG);
32		final int accent = ContextCompat.getColor(ctx,R.color.blue500);
33		fill.setColor(accent);
34		fill.setStyle(Paint.Style.FILL);
35		this.outline = new Paint(Paint.ANTI_ALIAS_FLAG);
36		outline.setColor(accent);
37		outline.setAlpha(50);
38		outline.setStyle(Paint.Style.FILL);
39		this.position = new GeoPoint(position);
40		this.accuracy = position.getAccuracy();
41	}
42
43	@Override
44	public void draw(final Canvas c, final MapView view, final boolean shadow) {
45		super.draw(c, view, shadow);
46
47		view.getProjection().toPixels(position, mapCenterPoint);
48		c.drawCircle(mapCenterPoint.x, mapCenterPoint.y,
49				Math.max(Config.Map.MY_LOCATION_INDICATOR_SIZE + Config.Map.MY_LOCATION_INDICATOR_OUTLINE_SIZE,
50						accuracy / (float) TileSystem.GroundResolution(position.getLatitude(), view.getZoomLevel())
51				), this.outline);
52		c.drawCircle(mapCenterPoint.x, mapCenterPoint.y, Config.Map.MY_LOCATION_INDICATOR_SIZE, this.fill);
53	}
54}