2012-12-13 54 views
3

我想在我的android應用程序中繪製一個圓形覆蓋圖,我當然可以輕鬆地做,併爲其添加顏色。Android mapview(negative coloring)

但我真正想做的是保持圓形透明,並以淺灰色遮住圓圈(世界其他地方)的外部。

我試圖添加圓作爲一個路徑,陰影世界和剪出圓圈,但我得到一個圍繞我的設備上的圓周邊框(雖然它看起來很好的模擬器)。

任何幫助表示讚賞。下面是一個代碼片段:

public void draw(Canvas canvas,MapView mapView,boolean shadow) super.draw(canvas,mapView,shadow);

Projection projection = mapView.getProjection(); 

    Point pt = new Point(); 

    GeoPoint geo = new GeoPoint((int) (mLat * 1e6), (int) (mLon * 1e6)); 

    projection.toPixels(geo, pt); 
    float circleRadius = projection.metersToEquatorPixels(mRadius) 
      * (1/FloatMath.cos((float) Math.toRadians(mLat))); 

    Paint innerCirclePaint; 

    innerCirclePaint = new Paint(); 
    innerCirclePaint.setColor(Color.TRANSPARENT); 
    innerCirclePaint.setAlpha(35); 
    innerCirclePaint.setAntiAlias(true); 
    innerCirclePaint.setStyle(Paint.Style.FILL); 

    Path path = new Path(); 
    path.setFillType(Path.FillType.WINDING); 
    path.addCircle((float) pt.x, (float) pt.y, circleRadius, Path.Direction.CCW);canvas.drawPath(path, innerCirclePaint); 
    canvas.drawARGB(150, 0, 0, 0); 
    canvas.clipPath(path); 
} 

回答

2
paint.setColor(Color.parseColor ("#88ff0000")); 
+0

你是說我只是改變顏色? 這不起作用! –

+0

抱歉..在地圖上有陰影嗎? – QuokMoon

+0

我不確定你的意思?你可以請更具體一點嗎? –

0

嘗試

path.setFillType(Path.FillType.INVERSE_WINDING); 

,而不是

path.setFillType(Path.FillType.WINDING); 

我嘗試了一個正常的形象,這個補丁爲我工作

Canvas canvas = new Canvas(bitmap); 
    Paint innerCirclePaint; 

    innerCirclePaint = new Paint(); 
    innerCirclePaint.setColor(Color.parseColor ("#88ff0000")); 
    innerCirclePaint.setAlpha(35); 
    innerCirclePaint.setAntiAlias(true); 
    innerCirclePaint.setStyle(Paint.Style.FILL); 

    Path path = new Path(); 
    path.setFillType(Path.FillType.INVERSE_WINDING); 
    path.addCircle(150, 150, 150, Path.Direction.CCW); 

    canvas.drawPath(path, innerCirclePaint); 
    canvas.drawARGB(0, 0, 0, 0); 
    canvas.clipPath(path); 

即使clipPath可能是一個原因

Work around Canvas.clipPath() that is not supported in android any more