2011-04-18 5 views
0

MapView에 사용자 지정 Drawable 오버레이를 그리려고합니다. Drawable을 확장하는 사용자 정의 클래스를 사용하여 캔버스에 원을 그립니다. 그런 다음 반경 변수를 전달하여 MapView에 적용되는 ItemizedOverlay에 추가합니다.Android : canvas.drawCircle 안에 타원이 있습니까?

지금까지는 잘 해결되었지만, 어떤 이유로 Canvas.drawCircle 메서드는 내부에 타원처럼 보이는 투명 원을 그려 넣었습니다. 그것을 일으키는 원인을 파악하십시오. 원을 투명하게 만들고 싶습니다. 그러나이 원 안에는이 타원을 원하지 않습니다.

http://img222.imageshack.us/img222/4356/circleellipse.png

나는 느린이 ...

import android.graphics.Canvas; 
import android.graphics.ColorFilter; 
import android.graphics.Paint; 
import android.graphics.drawable.Drawable; 
public class PileDrawable extends Drawable { 
    private static final Paint paint = new Paint(); 
    int rad; 
    public PileDrawable(int radius) { 
      paint.setARGB(100, 0, 255, 0); 
      paint.setAntiAlias(false); 
      paint.setStyle(Paint.Style.FILL); 
      rad=radius; 
    } 
    @Override 
    public void draw(Canvas canvas) { 

      canvas.drawCircle(0, 0, rad, paint); 

    } 
    @Override 
    public int getOpacity() { 
      return 0; 
    } 
    @Override 
    public void setAlpha(int alpha) { 

    } 
    @Override 
    public void setColorFilter(ColorFilter cf) { 

    } 
} 

이 그것을 MS 페인트 기술의 나의 부족을 무시하고, 어떻게 생겼는지의 종류는 다음과 같습니다

사용자 정의 드로어 블 클래스 Drawable에 범위를 적용 할 때 문제가 발생한다고 생각합니다.

PileDrawable pd = new PileDrawable((int)(mapView.getProjection().metersToEquatorPixels(Radius) * (1/ Math.cos(Math.toRadians(point.getLatitudeE6()))))); 
    pd.setBounds(0,0,pd.getIntrinsicWidth(),pd.getIntrinsicHeight()); //HERE? 

그래서 어떤 아이디어입니까?

답변

1

좀 늦을 지 모르지만 여기는 오버레이로지도에 원을 그리는 방법입니다. 이 사람들이 미래에 도움이되기를 바랍니다.

@Override 
public void draw(Canvas canvas, MapView mapView, boolean shadow) 
{ 
     Projection proj = mapView.getProjection(); 
     GeoPoint loc = new GeoPoint(geo.getLat(), geo.getLng()); 

     Point point = new Point(); 
     proj.toPixels(loc, point); 
     float rad = (float) (proj.metersToEquatorPixels(radius) * (1/Math.cos(Math.toRadians(loc.getLatitudeE6()/1000000)))); 

     Paint circle = new Paint(); 
     circle.setColor(colour); 
     circle.setAlpha(30); 
     circle.setAntiAlias(true); 
     circle.setStyle(Style.FILL); 

     canvas.drawCircle(point.x, point.y, rad, circle); 

     super.draw(canvas, mapView, shadow); 

} 

그리고 매력처럼 작동합니다. 타원을 그리는 코드가 없기 때문에 타원이 그려진 이유는 확실하지 않지만 PileDrawable을 초기화하는 동안 float 값 변환보다는 정수 값 변환의 원인이 될 수 있습니다.

관련 문제