Подтвердить что ты не робот

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, но, возможно, это обходной путь.

Вопрос

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

4b9b3361

Ответ 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;

}