Google Maps Android Polyline에 윤곽선을 그립니다.

11071 단어 Androidmaps
Google Maps Android의 Polyline은 다른 Shape과 달리 stroke를 지원하지 않습니다.
따라서 Maps 애플리케이션의 Direction 같은 것을 Polyline으로 표현하고 싶다면이렇게 하면 보기에 매우 아름답다.

이런 느낌으로 하면 안 되나?잠깐만요.

이것을 간단하게 실현하는 방법이 있다.
아래처럼 스트로크 컬러로 바른 폴리라인, 위에는 필립 컬러로 살짝 가늘게 바른 폴리라인이 겹쳐 스트로크가 그려진 것처럼 보인다.
void drawPolyline(GoogleMap googleMap, List<LatLng> positions) {
    int fillColor = ContextCompat.getColor(this, R.color.polylineFillColor);
    int strokeColor = ContextCompat.getColor(this, R.color.polylineStrokeColor);

    // strokeに見せかけるpolylineを描画する
    PolylineOptions strokeOptions = new PolylineOptions()
            .width(POLYLINE_WIDTH_IN_PIXELS)
            .color(strokeColor)
            .addAll(positions);
    googleMap.addPolyline(strokeOptions);

    // fillに見せかけるpolylineを描画する
    PolylineOptions fillOptions = new PolylineOptions()
            // strokeのwidth分細らせて、strokeに見せかけるpolylineが見えるようにする
            .width(POLYLINE_WIDTH_IN_PIXELS - POLYLINE_STROKE_WIDTH_IN_PIXELS * 2)
            .color(fillColor)
            .addAll(positions);

    googleMap.addPolyline(fillOptions);
}
매번 이런 글을 쓸 때마다 맛이 납니다. 다음strike를 지지하는polyline반을 하는 것이 좋습니다.
이렇게 되면 stroke를 정식으로 지원할 때의 이전도 쉽다.
public class StrokedPolylineOptions implements Parcelable {

    private final PolylineOptions fill;
    private final PolylineOptions stroke;

    public StrokedPolylineOptions() {
        fill = new PolylineOptions();
        stroke = new PolylineOptions();
    }

    public StrokedPolylineOptions add(LatLng point) {
        fill.add(point);
        stroke.add(point);
        return this;
    }

    public StrokedPolylineOptions width(float width) {
        float strokeWidth = getStrokeWidth();
        fill.width(width - strokeWidth * 2);
        stroke.width(width);
        return this;
    }

    public StrokedPolylineOptions fillColor(int color) {
        fill.color(color);
        return this;
    }

    ... 省略

    public StrokedPolyline addPolylineTo(GoogleMap googleMap) {
        Polyline strokePolyline = googleMap.addPolyline(stroke);
        Polyline fillPolyline = googleMap.addPolyline(fill);
        return new StrokedPolyline(fillPolyline, strokePolyline);
    }
}
Stroked Polyline과 같은 반을 만들면 상술한 draw Polyline은 직관적으로 변한다.
void drawPolyline(GoogleMap googleMap, List<LatLng> positions) {
    int fillColor = ContextCompat.getColor(this, R.color.polylineFillColor);
    int strokeColor = ContextCompat.getColor(this, R.color.polylineStrokeColor);

    StrokedPolylineOptions options = new StrokedPolylineOptions()
            .width(POLYLINE_WIDTH_IN_PIXELS)
            .strokeColor(strokeColor)
            .strokeWidth(POLYLINE_STROKE_WIDTH_IN_PIXELS)
            .fillColor(fillColor)
            .width(POLYLINE_WIDTH_IN_PIXELS)
            .addAll(positions);
    options.addPolylineTo(googleMap);
}
이상.
샘플 코드는 아래 Giithub 창고를 참조하세요.

좋은 웹페이지 즐겨찾기