我尝试制作基于 Android Maps API v2 的位置应用程序。我为我的位置点添加了标记,并为位置准确性添加了一个 GroundOverlay 圆圈。但 GroundOverlay 的 setPosition 函数设置略有不同。我找不到原因。
package com.example.locator;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.GroundOverlay;
import com.google.android.gms.maps.model.GroundOverlayOptions;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.content.Context;
import android.support.v4.app.FragmentActivity;
import android.view.Menu;
public class MainActivity extends FragmentActivity implements LocationListener
{
GoogleMap mMap;
Location lastLocation = null;
private LocationManager locationManager;
private String provider;
Marker curLoc = null;
GroundOverlay curLocCircle = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map)).getMap();
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(22.375675950685434, 29.83346939086914), 13));
locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Criteria criteria = new Criteria();
provider = locationManager.getBestProvider(criteria, false);
Location location = locationManager.getLastKnownLocation(provider);
if (location != null) {
onLocationChanged(location);
} else {
//empty
}
locationManager.requestLocationUpdates(provider, 400, 1, this);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
public void onLocationChanged(Location location) {
if (location != null) {
if (null != curLoc) {
curLoc.remove();
}
if (null != curLocCircle) {
curLocCircle.remove();
}
LatLng loc = new LatLng(location.getLatitude(),location.getLongitude());
curLoc = mMap.addMarker(new MarkerOptions()
.position(loc)
.title("My location")
.icon(BitmapDescriptorFactory.fromResource(R.drawable.location32)));
float accuracy = location.getAccuracy();
curLocCircle = mMap.addGroundOverlay(new GroundOverlayOptions()
.image(BitmapDescriptorFactory
.fromResource(R.drawable.location_circle))
.position(loc, accuracy)
.transparency(0)
);
curLocCircle.setPosition(loc);
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(loc, 13));
}
}
public void onProviderDisabled(String provider) {
// TODO Auto-generated method stub
}
public void onProviderEnabled(String provider) {
// TODO Auto-generated method stub
}
public void onStatusChanged(String provider, int status, Bundle extras) {
// TODO Auto-generated method stub
}
}
当我在线在调试器中暂停应用程序时
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(loc, 13));
手表显示此数据:
curLocCircle.getPosition() lat/lng: (22.397815012772206,29.954818561673164)
location.getLatitude() 22.397815
location.getLongitude() 29.9548184
loc lat/lng: (22.397815,29.9548184)
curLocCircle.getPosition() 在 setPosition(loc) 之后以某种方式显示不正确的位置写入;请帮帮我。