SetRadius on Circle дает пользователям плохой опыт работы на Картах Google

Я пытаюсь реализовать что-то вроде примеров Google Maps и их CircleDemoActivity :

Образцы Android

Проблема в том, что круг исчезает и появляется, и я записал эту проблему

Проблема с образцом Карт Google

По моему мнению, эта часть должна работать:

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

И проблема setRadius методом setRadius , но, возможно, это обходное решение.

Вопрос

Как это исправить?

Solutions Collecting From Web of "SetRadius on Circle дает пользователям плохой опыт работы на Картах Google"

Несколько месяцев назад мне пришлось реализовать анимацию круга, растущего и сжимающегося под маркером, чтобы сообщить нашему пользователю, что местоположение маркера точно не известно.

В первой реализации я использовал круг и имел ту же проблему. Я закончил использование GroundOverlay с круговым изображением, и он не мигает. Для получения правильного радиуса может потребоваться больше математических вычислений.

Надеюсь, это может помочь 🙂

Одним из способов было бы использовать GroundOverlay вместо круга. Вот пример:

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

Теперь в вашем коде:

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

}