SetRadius on Circle дает плохой пользовательский интерфейс в Google Maps
Я пытаюсь реализовать что-то вроде Google Maps
образцов и их CircleDemoActivity
:
Образцы Android
Проблема заключается в том, что круг исчезает и появляется, и я записал эту проблему
Проблема с образцами Карт Google
По-моему, эта часть должна работать:
if (marker.equals(radiusMarker)) {
radius = toRadiusMeters(centerMarker.getPosition(), radiusMarker.getPosition());
circle.setRadius(radius);
return true;
}
и проблема заключается в методе setRadius
, но, возможно, это обходной путь.
Вопрос
Как это исправить?
Ответы
Ответ 1
Несколько месяцев назад мне пришлось реализовать анимацию круга, растущего и сжимающегося под маркером, чтобы сообщить нашему пользователю, что местоположение маркера не было точно известно.
В первой реализации я использовал круг и имел ту же проблему.
Я закончил использование GroundOverlay с круговым изображением, и он не мигает. Для получения правильного радиуса может потребоваться больше математики.
Надеюсь, это могло бы помочь:)
Ответ 2
Одним из способов решения проблемы было бы использовать 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;
}