2012-07-25 5 views
1

지도 뷰를 축소했을 때 왜 내 아이콘이 바다 위로 나타나는지 알아 내려고했지만 점을 확대하면 정확합니다.축소했을 때 잘못된 위치에 안드로이드 맵보기 아이콘이 있습니다.

여기 내 코드입니다 :

@Override 
public void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    setContentView(R.layout.main); 

    mapView = (MapView) findViewById(R.id.mapview1); 
    mapView.setBuiltInZoomControls(true); 
    MapController mapController = mapView.getController(); 

    //set up test points 
    point = new GeoPoint(25982160, -80358564); 
    showAnimatedMarker(point, "true"); 
    point = new GeoPoint(34023084, -84781697); 
    showAnimatedMarker(point, "Test"); 
    point = new GeoPoint(40759508, -73987061); 
    showAnimatedMarker(point, "Yo YO YO"); 
    point = new GeoPoint(34152852, -118336107); 
    showAnimatedMarker(point, "Boom shakalaka"); 
    point = new GeoPoint(-23564595, -46652759); 
    showAnimatedMarker(point, "Testing having a real long name"); 

    mapController.setZoom(4); 
    mapController.animateTo(point); 
} 

public void showAnimatedMarker(GeoPoint point, String locationName) 
{ 
    //animate the marker 
    RelativeLayout v = (RelativeLayout) View.inflate(this, R.layout.markerlayout, null); 
    final ImageView marker = (ImageView) v.findViewById(R.id.marker); 
    final TextView markerText = (TextView) v.findViewById(R.id.markerText); 
    final String locName = locationName; 
    marker.post(new Runnable() { 
     @Override 
     public void run() { 
      markerText.setText(locName); 
      AnimationDrawable markerImage = (AnimationDrawable)marker.getDrawable();    
      markerImage.start(); 
     } 
    }); 
    mapView.addView(v, 0, new MapView.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, point, MapView.LayoutParams.BOTTOM_CENTER)); 

} 

여기 무슨 뜻인지 보여주는이 사진이고, 하나는 축소되고 하나는 캘리포니아 위치로 확대된다.

도움이 될 것입니다.

Zoomed In Image

Zoomed Out Image

편집 :

여기

내 업데이트 된 코드는

MapController mapController = mapView.getController(); 
    MyOverlay testOverlay; 

    //set up test points 
    point = new GeoPoint(25982160, -80358564); 
    //showAnimatedMarker(point, "true"); 
    testOverlay = new MyOverlay(this, mapView, point); 
    mapOverlays.add(testOverlay);  

    point = new GeoPoint(34023084, -84781697); 
    //showAnimatedMarker(point, "Test"); 
    testOverlay = new MyOverlay(this, mapView, point); 
    mapOverlays.add(testOverlay); 

    point = new GeoPoint(40759508, -73987061); 
    //showAnimatedMarker(point, "Yo YO YO"); 
    testOverlay = new MyOverlay(this, mapView, point); 
    mapOverlays.add(testOverlay); 

    point = new GeoPoint(34152852, -118336107); 
    //showAnimatedMarker(point, "Boom shakalaka"); 
    testOverlay = new MyOverlay(this, mapView, point); 
    mapOverlays.add(testOverlay); 

    point = new GeoPoint(-23564595, -46652759); 
    //showAnimatedMarker(point, "Testing having a real long name"); 
    testOverlay = new MyOverlay(this, mapView, point); 
    mapOverlays.add(testOverlay); 

    mapController.setZoom(4); 
    mapController.animateTo(point); 
    mapView.invalidate(); 
} 
+0

내 텍스트 뷰가 옆에있는 아이콘을 눌러하지만, 심지어 textview.settext와 = ""것을 알아 냈 확인; 그것은 완전히 잘못된 위치에 당신이 축소 할 때 :(. – firefistace

답변

2

가지고 (이 Frohnzie 게시 정확히 무엇 때문에 나는 myOverlays 클래스를 포함하지 않았다) 너는 지나치게 기능을 사용하는 것을 고려 했는가? 다음 오버레이는지도에서 마커를 움직입니다. 여러 마커의 경우 OverlayItem을 확장하는 데 사용할 수 있습니다.

public class MyOverlay extends Overlay { 
    private Drawable mMarker; 
    private MapView mMapView; 
    private int level; 
    private Timer timer; 
    Private GeoPoint mGeoPoint; 

    public MyOverlay(Context context, MapView mapView, GeoPoint geoPoint) { 
    mMapView = mapView; 
    mGeoPoint = geoPoint; 
    mMarker = context.getResources().getDrawable(R.drawable.position_anim); 
    timer = new Timer(); 
    timer.schedule(new TimerTask() { 
     @Override 
     public void run() { 
     level = (level + 1) % 2; 
     mMapView.postInvalidate(); 
     } 
    }, 1000, 1000); 
    } 

    @Override 
    public void draw(Canvas canvas, MapView mapView, boolean shadow) { 
    Projection projection = mapView.getProjection(); 
    Point center = new Point(); 
    projection.toPixels(mGeoPoint, center); 

    int width = mMarker.getIntrinsicWidth(); 
    int height = mMarker.getIntrinsicHeight(); 

    mMarker.setLevel(level); 
    mMarker.setBounds(center.x - width/2, center.y - height/2, center.x + width/2, center.y + height/2); 
    mMarker.draw(canvas); 
    } 
} 

예 마커 자원 (position_anim.xml) :

<level-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item android:maxLevel="0" android:drawable="@drawable/image1" /> 
    <item android:maxLevel="1" android:drawable="@drawable/image2" /> 
</level-list> 
+0

안녕하세요 Frohnzie, 답변 주셔서 감사합니다, 나는 그대로 귀하의 코드를 시도하고 결과가 동일합니다. 그러나 내가 각 지점을 올바르게 후에 코드를 추가했는지 확인하려면 좋은 방법 ( 을 나는 mapView.invalidate를 호출하는 모든 포인트가 추가 된 후에 나는 점을 볼 수 있습니다 그리고 그들은 애니메이션, mapOverlays.add (testOverlay) testOverlay = 새로운 MyOverlay (이,지도보기, 점) : 호출합니다. 그런데 포인트를 줌아웃 할 때 물체의 위치가 아니라 물 위에 위치 할 때 – firefistace

+0

예제에서 마커의 중심이 위의 위치에 있습니다. setBounds 매개 변수를 조정해야합니다 . 아마도 업데이트 된 코드를 게시 할 수 있습니다. – Frohnzie

+0

위의 업데이트 된 코드를 추가 했으므로 setbounds parameters now – firefistace

관련 문제