2012-12-13 3 views
3

Je voudrais dessiner une superposition de cercle dans mon application android, que je peux facilement faire et ajouter une couleur à cela.Android mapview (coloration négative)

Mais ce que je voudrais vraiment faire est de garder le cercle transparent et ombrer l'extérieur du cercle (le reste du monde) avec une couleur gris clair. J'ai essayé d'ajouter le cercle comme un chemin, d'ombrer le monde et de couper le cercle, mais j'obtiens un cadre entourant le cercle sur mon périphérique (bien que cela semble bien sur l'émulateur).

Toute aide appréciée. Voici un extrait de code:

public void draw (Toile canvas, MapView mapView, shadow booléen) { 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); 
} 

Répondre

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

suggérez-vous que je change simplement la couleur ?? Cela ne fonctionne pas! –

+0

désolé .. avoir une ombre sur la carte? – QuokMoon

+0

Je ne suis pas sûr de ce que vous voulez dire? Pouvez-vous s'il vous plaît être un peu plus précis? –

0

Essayez

path.setFillType(Path.FillType.INVERSE_WINDING); 

au lieu de

path.setFillType(Path.FillType.WINDING); 

Je l'ai essayé pour une image normale et ce patch a fonctionné pour moi

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); 

Et même clipPath aurait pu être une raison

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