내 작업은 사용자의 현재 위치를지도에 오버레이로 표시하는 것입니다.MapView가 오버레이를 표시하지 않습니다.
지금까지 내가 GPS를 사용할 때 가장 좋은 방법은, 그것을 할 것을 발견, 다음과 같이이다 :
public class MyMapActivity extends MapActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
final MapView mapView = (MapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
// Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
// Called when a new location is found by the network location provider.
Log.d("location", "locationchanged: " + location.getLatitude() + ", " + location.getLongitude());
List<Overlay> mapOverlays = mapView.getOverlays();
GeoPoint point = new GeoPoint((int)location.getLatitude(), (int)location.getLongitude());
OverlayItem overlayitem2 = new OverlayItem(point, "title", "hello home!");
Drawable drawable = CouponsMapActivity.this.getResources().getDrawable(R.drawable.androidmarker);
HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable, CouponsMapActivity.this);
itemizedoverlay.addOverlay(overlayitem2);
mapOverlays.add(itemizedoverlay);
// mapView.postInvalidate();
mapView.invalidate();
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
// Register the listener with the Location Manager to receive location updates
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
}
}
내가
Log.d("location", "locationchanged: " + location.getLatitude() + ", " + location.getLongitude());
위치에 디버그 포인트를 넣어 올바른가 .
나는 좌표를 반올림한다는 것을 알고 있는데 이것은 다소 잘못된 결과를 낳습니다. (이는 단지 int를 받아들이는 GeoPoint의 빠른 수정입니다.) 그러나 이것은 오버레이가 화면에 나타나지 않기 때문에 문제가되지 않습니다. 잘못된 위치. 그것은 전혀 나타나지 않습니다.
편집 : 여기 HelloItemizedOverlay입니다 :
공용 클래스 HelloItemizedOverlay는 ItemizedOverlay를 {확장
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>();
private Context mContext;
public HelloItemizedOverlay(Drawable defaultMarker) {
super(boundCenterBottom(defaultMarker));
}
public HelloItemizedOverlay(Drawable defaultMarker, Context context) {
super(boundCenterBottom(defaultMarker));
mContext = context;
}
public void addOverlay(OverlayItem overlay) {
mOverlays.add(overlay);
populate();
}
@Override
protected OverlayItem createItem(int i) {
return mOverlays.get(i);
}
@Override
public int size() {
return mOverlays.size();
}
@Override
protected boolean onTap(int index) {
OverlayItem item = mOverlays.get(index);
AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
dialog.setTitle(item.getTitle());
dialog.setMessage(item.getSnippet());
dialog.show();
return true;
}
참고 :
List<Overlay> mapOverlays = mapView.getOverlays();
Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker);
final HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable, this);
GeoPoint point2 = new GeoPoint(35410000, 139460000);
OverlayItem overlayitem2 = new OverlayItem(point2, "Sekai, konichiwa!", "I'm in Japan!");
itemizedoverlay.addOverlay(overlayitem2);
mapOverlays.add(itemizedoverlay);
:이 같은 메인 스레드에서 수동으로 포인트를 설정할 때 오버레이가 작동
그래서 문제는 다른 곳에서 발생합니다.
'HelloItemizedOverlay' 임 플리 멘 테이션을 제공 할 수 있습니까? 거기에 문제가있을 수 있습니다 .. –
HelloItemizedOverlay – Ixx
'LocationListerner' 메소드에'@ Override'를 추가하지 않는 것을 보았습니다. 이 문제는 –