2016-04-29 4 views
18

Ich versuche, so etwas wie in Google Maps Proben zu implementieren und ihren CircleDemoActivity:setRadius auf Kreis gibt schlechte Nutzererfahrung in Google Maps

Android Samples

Das Problem ist, dass der Kreis verschwindet und erscheint, und ich nahm dieses Problem

Google Maps Sample problem

meiner Meinung nach, dass ein Teil funktionieren soll:

if (marker.equals(radiusMarker)) { 
    radius = toRadiusMeters(centerMarker.getPosition(), radiusMarker.getPosition()); 
    circle.setRadius(radius); 
    return true; 
} 

und das Problem ist mit setRadius Methode, aber vielleicht ist ein Workaround.

Frage

Wie das beheben?

+2

Das ist [ein bekannter Fehler in Google Maps] (https://code.google.com/p/gmaps-api-issues/issues/detail? id = 5707). –

+1

Kennen Sie eine Problemumgehung? – ThirdMartian

+0

Leider nicht, aber eine interessante Idee ist in [that thread] beschrieben (https://code.google.com/p/gmaps-api-issues/issues/detail?id=5707#c14). –

Antwort

1

Vor ein paar Monaten musste ich eine Animation eines Kreises implementieren, der unter einem Marker wuchs und schrumpfte, um unseren Benutzer darüber zu informieren, dass der Markerstandort nicht genau bekannt war.

In einer ersten Implementierung habe ich einen Kreis verwendet und hatte das gleiche Problem. Ich endete mit einer GroundOverlay mit einem Kreisbild und es blinkt nicht. Es kann nur mehr Mathematik erfordern, um den richtigen Radius zu erhalten.

Ich hoffe, dass es helfen könnte :)

+0

Ich hatte das gleiche Problem und endete damit die gleiche Lösung. Es gibt einfach keinen anderen Weg, es jetzt zu tun. – zrgiu

0

Eine Abhilfe ein GroundOverlay anstelle eines Kreises zu verwenden wäre. Hier ist ein Beispiel:

// The drawable to use for the circle 
    GradientDrawable d = new GradientDrawable(); 
    d.setShape(GradientDrawable.OVAL); 
    d.setSize(500,500); 
    d.setColor(Color.BLUE); 
    d.setStroke(10, Color.BLACK); 

    Bitmap bitmap = Bitmap.createBitmap(d.getIntrinsicWidth() 
      , d.getIntrinsicHeight() 
      , Bitmap.Config.ARGB_8888); 

    // Convert the drawable to bitmap 
    Canvas canvas = new Canvas(bitmap); 
    d.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); 
    d.draw(canvas); 

    // Maximum radius of the circle 
    final int radius = 1000; 

    // Add the circle to the map 
    final GroundOverlay circle = map.addGroundOverlay(new GroundOverlayOptions() 
    .position(latLng, 2 * radius).image(BitmapDescriptorFactory.fromBitmap(bitmap))); 

Jetzt in Ihrem Code:

if (marker.equals(radiusMarker)) { 
radius = toRadiusMeters(centerMarker.getPosition(), radiusMarker.getPosition()); 
circle.setDimensions(2 * radius); 
return true; 

}

Verwandte Themen