我有这种方法在地图上设置当前位置图钉:
private void createPushPinOnMap(Canvas canvas, MapView mapView, BOMPushpin pushpin) {
Location location = currentBestLocation;
float accuracy = location.getAccuracy();
Point pointPts = mapView.getProjection().toPixels(new GeoPoint(pushpin.getLatitude(),
pushpin.getLongtitude()),
null);
Bitmap bmp1 = BitmapFactory.decodeResource(
context.getResources(), R.drawable.pushpin);
canvas.drawBitmap(bmp1, pointPts.x-10, pointPts.y-34, null);
}
但我需要更改此代码,因此图钉大小在某种程度上等于准确性(例如在maps.google.com位置图钉中)。
答案 0 :(得分:0)
为什么没有人告诉我,机器人谷歌api有一个名为MyLocation的类,它可以创造一切。
答案 1 :(得分:0)
以下是我在GTL应用程序中使用的示例代码,略有不同,我使用circle而不是pushpin。如果准确性已更改,则需要在lastAccuracy中进行设置。 GPSSettings.IS_SHOW_ACCURACY_MARKER是真实的。
这是代码
public class AccuracyOverlay extends Overlay {
private GeoPoint geoPoint;
private boolean isNeedClearCanvas = false;
private float lastAccuracy;
public void clearCanvas(Canvas canvas) {
canvas.drawColor(Color.WHITE);
}
private void drawAccuracyCircle(Canvas canvas, MapView mapView, GeoPoint geoPoint) {
// convert point to pixels
Point screenPoint = new Point();
mapView.getProjection().toPixels(geoPoint, screenPoint);
Paint circlePaint = new Paint();
circlePaint.setAntiAlias(true);
circlePaint.setStrokeWidth(2.0f);
circlePaint.setColor(0xff6666ff);
circlePaint.setStyle(Paint.Style.FILL_AND_STROKE);
circlePaint.setAlpha(64);
double lat = geoPoint.getLatitudeE6();
int radius = (int) mapView.getProjection().metersToEquatorPixels(lastAccuracy);
canvas.drawCircle(screenPoint.x, screenPoint.y, radius, circlePaint);
}
public int metersToRadius(double latitude) {
return (int) (mapView.getProjection().metersToEquatorPixels(lastAccuracy) * (1/ Math.cos(Math.toRadians(latitude))));
}
public void draw(Canvas canvas, MapView mapView, boolean shadow) {
if (GPSSettings.IS_SHOW_ACCURACY_MARKER) {
if (!shadow && getLastLocation() != null) {
geoPoint = getLastLocation();
}
if (geoPoint != null) {
if (GPSSettings.IS_SHOW_ACCURACY_MARKER && (lastAccuracy > 0)) {
drawAccuracyCircle(canvas, mapView, geoPoint);
}
}
if (isNeedClearCanvas) {
boolean wasOn = GPSSettings.IS_SHOW_ACCURACY_MARKER;
try {
try {
if (wasOn)
GPSSettings.IS_SHOW_ACCURACY_MARKER = false;
geoPoint = null;
canvas.drawColor(Color.WHITE);
}
finally {
if (wasOn) {
GPSSettings.IS_SHOW_ACCURACY_MARKER = true;
}
}
}
finally {
isNeedClearCanvas = false;
}
}
}
}
public AccuracyOverlay() {
super();
}
public void clearMarks() {
this.isNeedClearCanvas = true;
}
public void setLastAccuracy(float lastAccuracy) {
this.lastAccuracy = lastAccuracy;
}
}