гугл карты полилинии связанные точки / круги - PullRequest
0 голосов
/ 28 февраля 2019

enter image description here

Как вы можете видеть на скриншоте, есть 2 круга, связанных ломаной линией.Как мне этого добиться?Как это называется?

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

private void addMarker(LatLng position){

        int height = 50;
        int width = 50;
        BitmapDrawable bitmapdraw = (BitmapDrawable)getResources().getDrawable(R.mipmap.ic_blue_for_marker);
        Bitmap b=bitmapdraw.getBitmap();
        Bitmap smallMarker = Bitmap.createScaledBitmap(b, width, height, false);

        MarkerOptions options = new MarkerOptions()
                .position(position);
        options.icon(BitmapDescriptorFactory.fromBitmap(smallMarker));
        options.anchor(0.5f, 0.5f);
        mMap.addMarker(options);
    }

РЕДАКТИРОВАТЬ: Перед увеличением: enter image description here

После увеличения enter image description here

1 Ответ

0 голосов
/ 01 марта 2019

Кажется, проблема не в самом маркере - его размер не изменился при масштабировании.Например, с маркером drawable ic_blue_circle.xml вроде:

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="496.158dp"
        android:height="496.158dp"
        android:viewportWidth="496.158"
        android:viewportHeight="496.158">

    <path
        android:fillColor="#0000FF"
        android:pathData="M496.158,248.085c0-137.021-111.07-248.082-248.076-248.082C111.07,0.003,0,111.063,0,248.085 c0,137.002,111.07,248.07,248.082,248.07C385.088,496.155,496.158,385.087,496.158,248.085z" />
    <path
        android:fillColor="#FFFFFF"
        android:pathData="M351.08,248.083c0-56.891-46.115-103.002-103-103.002c-56.886,0-103.002,46.111-103.002,103.002 c0,56.881,46.116,102.996,103.002,102.996C304.965,351.079,351.08,304.964,351.08,248.083z" />
</vector>

и кодом вроде:

@Override
public void onMapReady(GoogleMap googleMap) {
    mGoogleMap = googleMap;

    List<LatLng> sourcePoints = new ArrayList<>();

    addCircleMarker(new LatLng(49.182856, -122.844883));
    sourcePoints.add(new LatLng(49.182856, -122.844883));
    sourcePoints.add(new LatLng(49.183452, -122.846288));
    sourcePoints.add(new LatLng(49.183761, -122.846739));
    sourcePoints.add(new LatLng(49.184343, -122.847050));
    sourcePoints.add(new LatLng(49.186917, -122.847061));
    sourcePoints.add(new LatLng(49.188655, -122.847885));
    sourcePoints.add(new LatLng(49.189560, -122.847885));
    addCircleMarker(new LatLng(49.189560, -122.847885));

    PolylineOptions polyLineOptions = new PolylineOptions();
    polyLineOptions.addAll(sourcePoints);
    polyLineOptions.width(10);
    polyLineOptions.color(Color.BLUE);
    mGoogleMap.addPolyline(polyLineOptions);

    mGoogleMap.animateCamera(CameraUpdateFactory.newLatLngZoom(sourcePoints.get(0), 15));
}

где:

public void addCircleMarker(LatLng latLng) {
    Drawable circleDrawable = ContextCompat.getDrawable(getApplicationContext(), R.drawable.ic_blue_circle);
    BitmapDescriptor markerIcon = getMarkerIconFromDrawable(circleDrawable, 30, 30);

    mGoogleMap.addMarker(new MarkerOptions()
            .position(latLng)
            .anchor(0.5f, 0.5f)
            .icon(markerIcon)
    );
}

private BitmapDescriptor getMarkerIconFromDrawable(Drawable drawable, int width, int height) {
    Canvas canvas = new Canvas();
    Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    canvas.setBitmap(bitmap);
    drawable.setBounds(0, 0, width, height);
    drawable.draw(canvas);
    return BitmapDescriptorFactory.fromBitmap(bitmap);
}

у вас есть что-то вроде этого:

Circle markers

и размер кругов при изменении масштаба не изменился:

Circle markers zoom

...