2012-06-27 3 views
0

사용자 지정 중심 오버레이 항목을 내지도에 올릴 수 없습니다. 항상 하단과 중앙에 나타납니다. 여기 내 코드입니다 :aDrawable.SetBounds (...)가 작동하지 않습니다.

------------ 내 오버레이 항목 클래스 -------------

public class EditionThumbOverlayItem extends OverlayItem { 

    public EditionThumbOverlayItem(GeoPoint aGeoPoint, Resources resources) { 
     super("", "", aGeoPoint); 
     Drawable pinThumbDrawable = resources.getDrawable(R.drawable.pin_thumb); 
     pinThumbDrawable.setBounds(pinThumbDrawable.getIntrinsicWidth() * (-2/5), 
       pinThumbDrawable.getIntrinsicHeight() * (-2/5), pinThumbDrawable.getIntrinsicWidth() * 3/5, 
       pinThumbDrawable.getIntrinsicHeight() * 3/5); 
     setMarker(pinThumbDrawable); 
    } 

} 

----- -------- 내 아이템 화 된 오버레이 클래스 -----------------

public class PinThumbOverlay extends ItemizedOverlay<OverlayItem> { 
    // Only one item can be set on this overlay 
    private OverlayItem mEditionThumb; 

    public PinThumbOverlay(Drawable pDefaultMarker, ResourceProxy pResourceProxy) { 
     super(pDefaultMarker, pResourceProxy); 
    } 

    @Override 
    public boolean onSnapToItem(int arg0, int arg1, Point arg2, IMapView arg3) { 
     return false; 
    } 

    @Override 
    protected OverlayItem createItem(int arg0) { 
     return mEditionThumb; 
    } 

    @Override 
    public int size() { 
     if (mEditionThumb == null) { 
      return 0; 
     } else { 
      return 1; 
     } 
    } 

    public void addOverlayItem(OverlayItem overlay) { 
     mEditionThumb = overlay; 
     populate(); 
    } 

    public void removeOverlayItem() { 
     mEditionThumb = null; 
     populate(); 
    } 
} 

-------------- --- 항목 별 오버레이 만들기 ----------------------

DefaultResourceProxyImpl defaultResouceProxyImpl = new DefaultResourceProxyImpl(getApplicationContext()); 
Drawable defaultPinEdition = getResources().getDrawable(R.drawable.pin_thumb); 
       mPinThumbOverlay = new PinThumbOverlay(defaultPinEdition, defaultResouceProxyImpl); 
mMapView.getOverlays().clear(); 
mMapView.getOverlays().add(mPinThumbOverlay); 

--------------- ---- 오버레이 항목 생성 ----------- --------------

EditionThumbOverlayItem editionThumb = new EditionThumbOverlayItem(new GeoPoint(mCurrentUserLocation), 
       getResources()); 
     mPinThumbOverlay.addOverlayItem(editionThumb); 

메모 : 나는 기본 google map api가 아니라 osmdroid map을 사용합니다.

public class MyActivity extends Activity { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     this.setContentView(R.layout.main); 
     mapView = (MapView) findViewById(R.id.mapview); 
     mapView.setBuiltInZoomControls(true); 
     mapView.setMultiTouchControls(true); 
     mapView.setClickable(true); 
     mapView.setUseDataConnection(true); 
     mapView.getController().setZoom(MAP_DEFAULT_ZOOM); 
     mapView.setTileSource(TileSourceFactory.MAPNIK); 
     resourceProxy = new DefaultResourceProxyImpl(getApplicationContext()); 

     GeoPoint location = getLocation() 
     ItemizedIconOverlay<OverlayItem> currentLocationOverlay; 
     Drawable marker = this.getResources().getDrawable(R.drawable.custom_marker); 
     OverlayItem myLocationOverlayItem = new OverlayItem("Here", "Current Position", location); 
     myLocationOverlayItem.setMarker(marker); 
     final ArrayList<OverlayItem> items = new ArrayList<OverlayItem>(); 
     items.add(myLocationOverlayItem); 
     currentLocationOverlay = new ItemizedIconOverlay<OverlayItem>(items, 
       new ItemizedIconOverlay.OnItemGestureListener<OverlayItem>() { 
        public boolean onItemSingleTapUp(final int index, final OverlayItem item) { 
         return true; 
        } 
        public boolean onItemLongPress(final int index, final OverlayItem item) { 
         return true; 
        } 
       }, resourceProxy);   

    mapView.getOverlays().add(this.currentLocationOverlay); 
    mapView.getController().setCenter(location); 

} 

답변

0

것은,이 코드를 사용 ItemizedOverlay에서 : 오히려

protected void onDrawItem(final Canvas canvas, final Item item, final Point curScreenCoords) { 
    final int state = (mDrawFocusedItem && (mFocusedItem == item) ? OverlayItem.ITEM_STATE_FOCUSED_MASK 
      : 0); 
    final Drawable marker = (item.getMarker(state) == null) ? getDefaultMarker(state) : item 
      .getMarker(state); 
    final HotspotPlace hotspot = item.getMarkerHotspot(); 

    boundToHotspot(marker, hotspot); 

    // draw it 
    Overlay.drawAt(canvas, marker, curScreenCoords.x, curScreenCoords.y, false); 
} 

또는 실제 덮어 쓰기는 boundToHotspot (마커, 핫스팟)에서 수행됩니다; 방법.

이 문제를 극복하려면 드로어 블에 경계를 설정하는 대신 OverlayItem에서 핫스팟을 설정하십시오. 예 :

GeoPoint point = new GeoPoint(currentLoc); 
OverlayItem item = new OverlayItem("my location", "my loc", point); 
item.setMarkerHotspot(HotspotPlace.BOTTOM_CENTER); 

이렇게하면 원하는 결과를 얻을 수 있습니다.

3

그것은 보인다 osmdroid가의 OnDrawItem 방법에있는 당신이합니다 (drawble.setBounds 설정 값) 메소드를 덮어 : 방금지도의 중심에 마커를 넣어하려는 경우

관련 문제