2011-04-28 7 views
1

mapActivity에 오버레이 경로를 그리려고합니다. android MapView DrawLine

내 ItemizedOverlay 클래스입니다 :

package com.state.park; 

import java.util.ArrayList; 

import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.graphics.Point; 
import android.graphics.drawable.Drawable; 

import com.google.android.maps.GeoPoint; 
import com.google.android.maps.ItemizedOverlay; 
import com.google.android.maps.MapView; 
import com.google.android.maps.Overlay; 
import com.google.android.maps.OverlayItem; 
import com.google.android.maps.Projection; 

public class Flytrap extends ItemizedOverlay<OverlayItem> { 
private GeoPoint gp1, gp2; 
private int color; 
private ArrayList<OverlayItem> mOverlays = new ArrayList<OverlayItem>(); 
public Flytrap(Drawable defaultMarker){ 
    super(defaultMarker); 
} 

public Flytrap(GeoPoint gp1, GeoPoint gp2, int color, MapView mapView, Drawable defaultMarker) { 
    super(boundCenterBottom(defaultMarker)); 
    this.gp1 = gp1; 
    this.gp2 = gp2; 
    this.color = color; 
} 

@Override 
public void draw(Canvas canvas, MapView mapView, boolean shadow) { 

    Projection projection = mapView.getProjection(); 
    Paint paint = new Paint(); 
    Point point = new Point(); 
    projection.toPixels(gp1, point); 
    paint.setColor(color); 
    Point point2 = new Point(); 
    projection.toPixels(gp2, point2); 
    paint.setStrokeWidth(5); 
    paint.setAlpha(120); 
    canvas.drawLine(point.x, point.y, point2.x, point2.y, paint); 
    super.draw(canvas, mapView, shadow); 
} 

public void addItem(OverlayItem item){ 
    mOverlays.add(item); 
     populate(); 

} 

@Override 
protected OverlayItem createItem(int i) { 
    // TODO Auto-generated method stub 
    return mOverlays.get(i); 
} 

@Override 
public int size() { 
    // TODO Auto-generated method stub 
    return 0; 
} 


} 

그리고 이것은 내가 그것을 호출 MapActivity입니다

ArrayList<Double> lon = new ArrayList<Double>(); 
ArrayList<Double> lat = new ArrayList<Double>(); 
ArrayList<GeoPoint> geopoints = new ArrayList<GeoPoint>(); 
List<Overlay> overlays; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.map); 

    String flytrap = readRawTextFile(getBaseContext(), R.raw.flytrap); 
    getlonlat(flytrap); 

    mapView = (MapView) findViewById(R.id.mapview); 
    mapView.setBuiltInZoomControls(true); 
    mc = mapView.getController(); 
    myLoc = new MyLocationOverlay(this, mapView); 
    mapView.getOverlays().add(myLoc); 
    locManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
    locListener = new MyLocationListener(); 
    locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, 
      locListener); 

    Drawable d = getResources().getDrawable(R.drawable.icon); 

    for (int i = 1; i < geopoints.size(); i++) { 

     mapView.getOverlays().add(new Flytrap(geopoints.get(i-1), geopoints.get(i), Color.BLUE, mapView, d)); 
    } 

    mapView.invalidate(); 
} 

protected boolean isLocationDisplayed() { 
    return myLoc.isMyLocationEnabled(); 
} 

protected boolean isRouteDisplayed() { 
    // TODO Auto-generated method stub 
    return false; 
    } 

지도에 선을 표시하는 방법에 대한 어떤 제안.. 지금 당장 실행됩니다. 오버레이는 표시되지 않습니다.

감사합니다. 대신

mapView.invalidate(); 

답변

0

mapView.postInvalidate(); 

는 또한 오버레이는 것과 같은 오버레이 대신 ItemizedOverlay의 확장해야 시도 클릭 풍선 등을위한 것입니다. 오버레이는 MapView가 생성자 내부에 있어야 할뿐만 아니라 이미 그리기 메소드에서 액세스 할 수 있어야합니다.