2012-10-30 125 views
0

我的任务是显示用户的当前位置作为地图上的覆盖。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()); 

位置有正确的。

我知道我四舍五入坐标,这给我一个有点错误的结果(这是一个快速修复GeoPoint只接受int) - 但这不是问题,因为覆盖也不会出现在错误的位置。它并没有出现。

编辑:这里是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); 

所以这个问题在别的地方。

+0

你能提供'HelloItemizedOverlay'暗示吗?可能是问题在那里.. –

+0

添加了HelloItemizedOverlay – Ixx

+0

我注意到你并没有在你的'LocationListerner'方法中添加'@ Override'。这可能是问题 –

回答

0

我前段时间有同样的问题,它与可绘制边界有某种关系。当您在HelloItemizedOverlay的构造函数上设置drawable参数时,请尝试使用此方法。

HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(boundCenterBottom(drawable), CouponsMapActivity.this); 


private Drawable boundCenterBottom(Drawable marker) { 
    marker.setBounds((-marker.getIntrinsicWidth())/2, -marker.getIntrinsicHeight(), 
      marker.getIntrinsicWidth()/2, 0); 
    return marker; 
} 
+0

问题不是可绘制的,我编辑我的帖子,设置随机叠加“手动”工作。这可能与onCreate完成并且地图没有重新绘制或者其他相关。但我打电话invalidate()... – Ixx