Hình dạng

Chọn nền tảng: Android iOS JavaScript

Bản đồ có hình nhiều đường màu đỏ đồng nhất

API Google Maps dành cho Android cung cấp một số cách đơn giản để bạn thêm hình dạng vào bản đồ nhằm tuỳ chỉnh các hình dạng đó cho ứng dụng của mình.

  • Polyline là một chuỗi các đoạn đường kẻ được kết nối có thể tạo thành bất kỳ hình dạng nào bạn muốn và có thể dùng để đánh dấu các đường dẫn và tuyến đường trên bản đồ.
  • Polygon là một hình dạng kèm theo có thể dùng để đánh dấu các khu vực trên bản đồ.
  • Circle là một phép chiếu chính xác về địa lý của một vòng tròn trên bề mặt Trái Đất được vẽ trên bản đồ.

Đối với tất cả các hình dạng này, bạn có thể tuỳ chỉnh giao diện của chúng bằng cách thay đổi một số thuộc tính.

Mã mẫu

Hướng dẫn về cách thêm đa giác và hình nhiều đường để biểu thị các khu vực và tuyến đường có toàn bộ mã cho một ứng dụng Android đơn giản.

Ngoài ra, kho lưu trữ Apidemos trên GitHub bao gồm các mẫu minh hoạ cách sử dụng các hình dạng và đặc điểm của các hình dạng đó:

Hình nhiều đường

Lớp Polyline xác định một tập hợp các đoạn đường được kết nối trên bản đồ. Đối tượng Polyline bao gồm một tập hợp các vị trí LatLng và tạo một loạt các phân đoạn đường kẻ kết nối các vị trí đó theo trình tự có thứ tự.

Video này đưa ra ý tưởng về cách giúp người dùng của bạn đến nơi họ đang đến bằng cách sử dụng hình nhiều đường để vẽ một đường dẫn trên bản đồ.

Để tạo Hình nhiều đường, trước tiên, hãy tạo đối tượng PolylineOptions rồi thêm điểm vào đối tượng đó. Điểm đại diện cho một điểm trên bề mặt trái đất và được biểu thị dưới dạng đối tượng LatLng. Các phân đoạn đường kẻ được vẽ giữa các điểm theo thứ tự mà bạn thêm các phân đoạn đó vào đối tượng PolylineOptions.

Để thêm điểm vào đối tượng PolylineOptions, hãy gọi PolylineOptions.add(). Lưu ý là phương thức này có số lượng tham số thay đổi để bạn có thể thêm nhiều điểm cùng một lúc (bạn cũng có thể gọi PolylineOptions.addAll(Iterable<LatLng>) nếu các điểm đó đã có trong danh sách).

Sau đó, bạn có thể thêm hình nhiều đường vào bản đồ bằng cách gọi GoogleMap.addPolyline(PolylineOptions). Phương thức này sẽ trả về một đối tượng Polyline mà bạn có thể thay đổi hình nhiều đường vào lúc khác.

Đoạn mã sau đây minh hoạ cách thêm một hình chữ nhật vào bản đồ:

Java


// Instantiates a new Polyline object and adds points to define a rectangle
PolylineOptions polylineOptions = new PolylineOptions()
    .add(new LatLng(37.35, -122.0))
    .add(new LatLng(37.45, -122.0))  // North of the previous point, but at the same longitude
    .add(new LatLng(37.45, -122.2))  // Same latitude, and 30km to the west
    .add(new LatLng(37.35, -122.2))  // Same longitude, and 16km to the south
    .add(new LatLng(37.35, -122.0)); // Closes the polyline.

// Get back the mutable Polyline
Polyline polyline = map.addPolyline(polylineOptions);

      

Kotlin


// Instantiates a new Polyline object and adds points to define a rectangle
val polylineOptions = PolylineOptions()
    .add(LatLng(37.35, -122.0))
    .add(LatLng(37.45, -122.0)) // North of the previous point, but at the same longitude
    .add(LatLng(37.45, -122.2)) // Same latitude, and 30km to the west
    .add(LatLng(37.35, -122.2)) // Same longitude, and 16km to the south
    .add(LatLng(37.35, -122.0)) // Closes the polyline.

// Get back the mutable Polyline
val polyline = map.addPolyline(polylineOptions)

      

Hình chữ nhật đó sẽ xuất hiện trên bản đồ như sau:

Bản đồ có một hình nhiều đường hình chữ nhật

Để thay đổi hình dạng của hình nhiều đường sau khi thêm, bạn có thể gọi Polyline.setPoints() và cung cấp danh sách các điểm mới cho hình nhiều đường.

Bạn có thể tuỳ chỉnh hình thức của hình nhiều đường cả trước khi thêm vào bản đồ và sau khi hình nhiều đường đó được thêm vào bản đồ. Hãy xem phần tuỳ chỉnh giao diện bên dưới để biết thêm thông tin chi tiết.

Tuỳ chỉnh hình nhiều đường

Có một số cách để tuỳ chỉnh hình thức của hình nhiều đường:

  • Hình nhiều đường nhiều màu đặt các đoạn nhiều đường thành các màu khác nhau.
  • Hình nhiều đường chuyển màu tô màu một hình nhiều đường bằng cách sử dụng độ dốc gồm hai màu.
  • Hình nhiều đường được tạo kiểu tạo kiểu cho một hình nhiều đường bằng cách sử dụng các bitmap lặp lại.

Để sử dụng Tuỳ chỉnh nhiều đường, bạn phải sử dụng 18.1.0 trở lên của SDK Maps dành cho Android và sử dụng SDK Maps mới nhất dành cho trình kết xuất Android.

Tạo một hình nhiều đường nhiều màu

Bản đồ có hình nhiều màu

Bạn có thể sử dụng span để tô màu riêng các phân đoạn của một hình nhiều đường bằng cách tạo các đối tượng StyleSpan và thêm các đối tượng đó vào PolylineOptions bằng phương thức addSpan() hoặc addSpans(). Theo mặc định, mỗi mục trong mảng sẽ đặt màu của phân đoạn dòng tương ứng. Ví dụ sau đây cho thấy cách đặt màu cho phân đoạn để tạo một hình nhiều đường với các phân đoạn màu đỏ và xanh lục:

Java


Polyline line = map.addPolyline(new PolylineOptions()
        .add(new LatLng(47.6677146,-122.3470447), new LatLng(47.6442757,-122.2814693))
        .addSpan(new StyleSpan(Color.RED))
        .addSpan(new StyleSpan(Color.GREEN)));

      

Kotlin


val line = map.addPolyline(
    PolylineOptions()
        .add(LatLng(47.6677146, -122.3470447), LatLng(47.6442757, -122.2814693))
        .addSpan(StyleSpan(Color.RED))
        .addSpan(StyleSpan(Color.GREEN))
)

      

Tạo hình nhiều đường chuyển màu

Bản đồ với hình nhiều đường chuyển màu

Bạn có thể xác định độ dốc bằng cách chỉ định 2 số nguyên alpha-red-green-blue (ARGB) 32 bit để chỉ định màu bắt đầu và màu kết thúc của nét vẽ. Đặt thuộc tính này trên đối tượng tuỳ chọn của hình dạng bằng cách gọi PolylineOptions.addSpan(). Ví dụ sau đây cho thấy việc tạo một hình nhiều đường chuyển màu từ màu đỏ sang màu vàng từ Sở thú Woodland đến Kirkland, WA.

Java


Polyline line = map.addPolyline(new PolylineOptions()
        .add(new LatLng(47.6677146,-122.3470447), new LatLng(47.6442757,-122.2814693))
        .addSpan(new StyleSpan(StrokeStyle.gradientBuilder(Color.RED, Color.YELLOW).build())));

      

Kotlin


val line = map.addPolyline(
    PolylineOptions()
        .add(LatLng(47.6677146, -122.3470447), LatLng(47.6442757, -122.2814693))
        .addSpan(
            StyleSpan(
                StrokeStyle.gradientBuilder(
                    Color.RED,
                    Color.YELLOW
                ).build()
            )
        )
)

      

Tạo một hình nhiều đường có dấu

Bản đồ có một hình nhiều dấu

Bạn có thể đặt giao diện của hình nhiều đường thành hoạ tiết bitmap lặp lại. Để thực hiện việc này, hãy tạo StampStyle của TextureStyle, sau đó đặt thuộc tính này trên đối tượng tuỳ chọn của hình dạng bằng cách gọi PolylineOptions.addSpan() như minh hoạ dưới đây:

Java


StampStyle stampStyle =
        TextureStyle.newBuilder(BitmapDescriptorFactory.fromResource(R.drawable.walking_dot)).build();
StyleSpan span = new StyleSpan(StrokeStyle.colorBuilder(Color.RED).stamp(stampStyle).build());
map.addPolyline(new PolylineOptions()
        .add(new LatLng(47.6677146,-122.3470447), new LatLng(47.6442757,-122.2814693))
        .addSpan(span));

      

Kotlin


val stampStyle =
    TextureStyle.newBuilder(BitmapDescriptorFactory.fromResource(R.drawable.walking_dot)).build()
val span = StyleSpan(StrokeStyle.colorBuilder(Color.RED).stamp(stampStyle).build())
map.addPolyline(
    PolylineOptions()
        .add(LatLng(47.6677146, -122.3470447), LatLng(47.6442757, -122.2814693))
        .addSpan(span)
)

      

Sự kiện nhiều đường

Theo mặc định, hình nhiều đường không thể nhấp vào được. Bạn có thể bật và tắt tính năng nhấp bằng cách gọi Polyline.setClickable(boolean).

Sử dụng OnPolylineClickListener để theo dõi các sự kiện nhấp chuột trên một hình nhiều đường có thể nhấp. Để thiết lập trình nghe này trên bản đồ, hãy gọi GoogleMap.setOnPolylineClickListener(OnPolylineClickListener). Khi người dùng nhấp vào một hình nhiều đường, bạn sẽ nhận được lệnh gọi lại onPolylineClick(Polyline).

Đa giác

Đối tượng Polygon tương tự như đối tượng Polyline ở chỗ chúng bao gồm một loạt toạ độ theo trình tự theo thứ tự. Tuy nhiên, thay vì được kết thúc mở, đa giác được thiết kế để xác định các khu vực trong một vòng lặp khép kín với phần nội thất được điền vào.

Bạn có thể thêm Polygon vào bản đồ theo cách tương tự như khi thêm Polyline. Trước tiên, hãy tạo một đối tượng PolygonOptions rồi thêm một số điểm vào đối tượng đó. Các điểm này sẽ tạo thành đường viền của đa giác. Sau đó, bạn hãy thêm đa giác vào bản đồ bằng cách gọi GoogleMap.addPolygon(PolygonOptions). Thao tác này sẽ trả về một đối tượng Polygon.

Đoạn mã sau đây sẽ thêm một hình chữ nhật vào bản đồ.

Java


// Instantiates a new Polygon object and adds points to define a rectangle
PolygonOptions polygonOptions = new PolygonOptions()
    .add(new LatLng(37.35, -122.0),
        new LatLng(37.45, -122.0),
        new LatLng(37.45, -122.2),
        new LatLng(37.35, -122.2),
        new LatLng(37.35, -122.0));

// Get back the mutable Polygon
Polygon polygon = map.addPolygon(polygonOptions);

      

Kotlin


// Instantiates a new Polygon object and adds points to define a rectangle
val rectOptions = PolygonOptions()
    .add(
        LatLng(37.35, -122.0),
        LatLng(37.45, -122.0),
        LatLng(37.45, -122.2),
        LatLng(37.35, -122.2),
        LatLng(37.35, -122.0)
    )

// Get back the mutable Polygon
val polygon = map.addPolygon(rectOptions)

      

Để thay đổi hình dạng của đa giác sau khi thêm, bạn có thể gọi Polygon.setPoints() và cung cấp danh sách các điểm mới cho đường viền của đa giác.

Bạn có thể tuỳ chỉnh giao diện của đa giác cả trước khi thêm vào bản đồ và sau khi đa giác đã được thêm vào bản đồ. Hãy xem phần tuỳ chỉnh giao diện bên dưới để biết thêm thông tin chi tiết.

Tự động hoàn thành đa giác

Đa giác trong ví dụ trên bao gồm 5 toạ độ, nhưng lưu ý rằng toạ độ đầu tiên và cuối cùng là cùng một vị trí, giúp xác định vòng lặp. Tuy nhiên, trong thực tế, vì đa giác xác định khu vực đóng, bạn không cần phải xác định toạ độ cuối cùng này. Nếu toạ độ cuối cùng khác với toạ độ đầu tiên, API sẽ tự động "đóng" đa giác bằng cách thêm toạ độ đầu tiên vào cuối chuỗi toạ độ.

Hai đa giác dưới đây là tương đương và việc gọi polygon.getPoints() cho mỗi đa giác sẽ trả về cả 4 điểm.

Java


Polygon polygon1 = map.addPolygon(new PolygonOptions()
    .add(new LatLng(0, 0),
        new LatLng(0, 5),
        new LatLng(3, 5),
        new LatLng(0, 0))
    .strokeColor(Color.RED)
    .fillColor(Color.BLUE));

Polygon polygon2 = map.addPolygon(new PolygonOptions()
    .add(new LatLng(0, 0),
        new LatLng(0, 5),
        new LatLng(3, 5))
    .strokeColor(Color.RED)
    .fillColor(Color.BLUE));

      

Kotlin


val polygon1 = map.addPolygon(
    PolygonOptions()
        .add(
            LatLng(0.0, 0.0),
            LatLng(0.0, 5.0),
            LatLng(3.0, 5.0),
            LatLng(0.0, 0.0)
        )
        .strokeColor(Color.RED)
        .fillColor(Color.BLUE)
)
val polygon2 = map.addPolygon(
    PolygonOptions()
        .add(
            LatLng(0.0, 0.0),
            LatLng(0.0, 5.0),
            LatLng(3.0, 5.0)
        )
        .strokeColor(Color.RED)
        .fillColor(Color.BLUE)
)

      

Tạo một đa giác rỗng

Bạn có thể kết hợp nhiều đường dẫn trong một đối tượng Polygon duy nhất để tạo ra các hình dạng phức tạp, chẳng hạn như các vòng tô kín hoặc "bánh rán" (nơi các khu vực đa giác xuất hiện bên trong đa giác dưới dạng "đảo"). Các hình dạng phức tạp luôn là sự kết hợp của nhiều đường dẫn đơn giản hơn.

Hai đường dẫn phải được xác định trong cùng một khu vực. Vùng lớn hơn trong hai vùng xác định vùng lấp đầy và là một đa giác đơn giản không có tuỳ chọn bổ sung. Sau đó, truyền đường dẫn thứ hai đến phương thức addHole(). Khi đường dẫn thứ hai, đường dẫn nhỏ hơn nằm đầy đường dẫn lớn hơn, đường dẫn sẽ trông như thể một phần của đa giác đã bị xoá. Nếu lỗ giao với đường viền của đa giác, thì đa giác sẽ được kết xuất mà không có bất kỳ phần tô nào.

Đoạn mã dưới đây sẽ tạo một hình chữ nhật duy nhất có một lỗ hình chữ nhật nhỏ hơn.

Java


List<LatLng> hole = Arrays.asList(new LatLng(1, 1),
    new LatLng(1, 2),
    new LatLng(2, 2),
    new LatLng(2, 1),
    new LatLng(1, 1));
Polygon hollowPolygon = map.addPolygon(new PolygonOptions()
    .add(new LatLng(0, 0),
        new LatLng(0, 5),
        new LatLng(3, 5),
        new LatLng(3, 0),
        new LatLng(0, 0))
    .addHole(hole)
    .fillColor(Color.BLUE));

      

Kotlin


val hole = listOf(
    LatLng(1.0, 1.0),
    LatLng(1.0, 2.0),
    LatLng(2.0, 2.0),
    LatLng(2.0, 1.0),
    LatLng(1.0, 1.0)
)
val hollowPolygon = map.addPolygon(
    PolygonOptions()
        .add(
            LatLng(0.0, 0.0),
            LatLng(0.0, 5.0),
            LatLng(3.0, 5.0),
            LatLng(3.0, 0.0),
            LatLng(0.0, 0.0)
        )
        .addHole(hole)
        .fillColor(Color.BLUE)
)

      

Đa giác rỗng xuất hiện trên bản đồ như minh họa dưới đây:

Bản đồ có một hình nhiều đường kẻ hình chữ nhật rỗng

Sự kiện đa giác

Theo mặc định, đa giác không thể nhấp được. Bạn có thể bật và tắt tính năng nhấp bằng cách gọi Polygon.setClickable(boolean).

Sử dụng OnPolygonClickListener để theo dõi các sự kiện nhấp chuột trên một đa giác có thể nhấp. Để thiết lập trình nghe này trên bản đồ, hãy gọi GoogleMap.setOnPolygonClickListener(OnPolygonClickListener). Khi người dùng nhấp vào một đa giác, bạn sẽ nhận được một lệnh gọi lại onPolygonClick(Polygon).

Vòng tròn

Bản đồ có vòng tròn

Ngoài một lớp Polygon chung, API Maps cũng bao gồm các lớp cụ thể cho đối tượng Circle để đơn giản hoá quá trình xây dựng các đối tượng đó.

Để tạo một vòng tròn, bạn phải chỉ định hai thuộc tính sau:

  • center dưới dạng LatLng.
  • radius inch.

Sau đó, một vòng tròn được định nghĩa là tập hợp tất cả các điểm trên bề mặt của Trái đất cách center đã cho radius mét. Do cách chiếu Phép chiếu Kính vạn hoa mà API Maps sử dụng hiển thị một hình cầu trên một mặt phẳng, nên hình cầu này sẽ xuất hiện dưới dạng một hình tròn gần như hoàn hảo trên bản đồ khi nằm gần đường xích đạo và sẽ ngày càng xuất hiện không tròn (trên màn hình) khi hình tròn di chuyển ra khỏi đường xích đạo.

Để thay đổi hình dạng của vòng tròn sau khi thêm, bạn có thể gọi Circle.setRadius() hoặc Circle.setCenter() và cung cấp các giá trị mới.

Bạn có thể tuỳ chỉnh giao diện của vòng tròn cả trước khi thêm vào bản đồ và sau khi vòng tròn được thêm vào bản đồ. Hãy xem phần tuỳ chỉnh giao diện bên dưới để biết thêm thông tin chi tiết.

Đoạn mã sau đây thêm một vòng tròn vào bản đồ bằng cách tạo một đối tượng CircleOptions và gọi GoogleMap.addCircle(CircleOptions):

Java


// Instantiates a new CircleOptions object and defines the center and radius
CircleOptions circleOptions = new CircleOptions()
    .center(new LatLng(37.4, -122.1))
    .radius(1000); // In meters

// Get back the mutable Circle
Circle circle = map.addCircle(circleOptions);

      

Kotlin


// Instantiates a new CircleOptions object and defines the center and radius
val circleOptions = CircleOptions()
    .center(LatLng(37.4, -122.1))
    .radius(1000.0) // In meters

// Get back the mutable Circle
val circle = map.addCircle(circleOptions)

      

Sự kiện vòng kết nối

Theo mặc định, các vòng kết nối không thể nhấp vào được. Bạn có thể bật và tắt tính năng nhấp bằng cách gọi GoogleMap.addCircle() thông qua CircleOptions.clickable(boolean) hoặc Circle.setClickable(boolean).

Sử dụng OnCircleClickListener để theo dõi các sự kiện nhấp chuột trên một vòng tròn có thể nhấp. Để thiết lập trình nghe này trên bản đồ, hãy gọi GoogleMap.setOnCircleClickListener(OnCircleClickListener).

Khi người dùng nhấp vào một vòng tròn, bạn sẽ nhận được lệnh gọi lại onCircleClick(Circle), như trong mã mẫu sau:

Java


Circle circle = map.addCircle(new CircleOptions()
    .center(new LatLng(37.4, -122.1))
    .radius(1000)
    .strokeWidth(10)
    .strokeColor(Color.GREEN)
    .fillColor(Color.argb(128, 255, 0, 0))
    .clickable(true));

map.setOnCircleClickListener(new GoogleMap.OnCircleClickListener() {
    @Override
    public void onCircleClick(Circle circle) {
        // Flip the r, g and b components of the circle's stroke color.
        int strokeColor = circle.getStrokeColor() ^ 0x00ffffff;
        circle.setStrokeColor(strokeColor);
    }
});

      

Kotlin


val circle = map.addCircle(
    CircleOptions()
        .center(LatLng(37.4, -122.1))
        .radius(1000.0)
        .strokeWidth(10f)
        .strokeColor(Color.GREEN)
        .fillColor(Color.argb(128, 255, 0, 0))
        .clickable(true)
)
map.setOnCircleClickListener {
    // Flip the r, g and b components of the circle's stroke color.
    val strokeColor = it.strokeColor xor 0x00ffffff
    it.strokeColor = strokeColor
}

      

Tuỳ chỉnh giao diện

Bạn có thể thay đổi giao diện của một hình dạng cả trước khi hình dạng đó được thêm vào bản đồ (bằng cách chỉ định thuộc tính mong muốn trên đối tượng tuỳ chọn) hoặc sau khi hình dạng đó được thêm vào bản đồ. Phương thức getter cũng được hiển thị cho mọi thuộc tính để bạn có thể dễ dàng truy cập vào trạng thái hiện tại của hình dạng.

Đoạn mã sau đây thêm một hình nhiều đường màu xanh dương đậm với các phân đoạn trắc địa từ Melbourne đến Perth. Các phần dưới đây sẽ giải thích chi tiết hơn về các thuộc tính này.

Java


Polyline polyline = map.addPolyline(new PolylineOptions()
    .add(new LatLng(-37.81319, 144.96298), new LatLng(-31.95285, 115.85734))
    .width(25)
    .color(Color.BLUE)
    .geodesic(true));

      

Kotlin


val polyline = map.addPolyline(
    PolylineOptions()
        .add(LatLng(-37.81319, 144.96298), LatLng(-31.95285, 115.85734))
        .width(25f)
        .color(Color.BLUE)
        .geodesic(true)
)

      

Bản đồ sẽ hiển thị như sau:

Bản đồ với một hình nhiều đường từ Melbourne đến Perth

Lưu ý: Mặc dù hầu hết các thuộc tính này có thể áp dụng cho mọi hình dạng được mô tả, nhưng một số thuộc tính có thể không phù hợp với một số hình dạng nhất định (ví dụ: hình Polyline không thể có màu nền vì hình dạng này không có phần bên trong).

Màu nét

Màu nét vẽ là số nguyên alpha-red-green-blue (ARGB) 32 bit chỉ định độ mờ và màu sắc của nét vẽ trên hình. Đặt thuộc tính này trên đối tượng tuỳ chọn của hình dạng bằng cách gọi *Options.strokeColor() (hoặc PolylineOptions.color() trong trường hợp hình nhiều đường). Nếu không chỉ định, màu nét vẽ mặc định là màu đen (Color.BLACK).

Sau khi hình dạng được thêm vào bản đồ, bạn có thể truy cập màu của nét vẽ bằng cách gọi getStrokeColor() (hoặc getColor() cho một hình nhiều đường) và có thể được thay đổi bằng cách gọi setStrokeColor() (setColor() for a polyline).

Màu nền

Màu tô chỉ áp dụng cho đa giác và hình tròn. Chế độ này không áp dụng cho hình nhiều đường vì các đường quét này không có phần bên trong được xác định. Đối với một đa giác, các vùng bên trong các lỗ của đa giác không thuộc phần bên trong của đa giác và sẽ không được tô màu nếu được đặt màu tô.

Màu tô là một số nguyên alpha-red-green-blue (ARGB) 32 bit, dùng để xác định độ mờ và màu cho phần bên trong hình. Đặt thuộc tính này trên đối tượng tuỳ chọn của hình dạng bằng cách gọi *Options.fillColor(). Nếu không chỉ định, màu nét vẽ mặc định sẽ trong suốt (Color.TRANSPARENT).

Sau khi hình dạng được thêm vào bản đồ, màu nền có thể được truy cập bằng cách gọi getFillColor() và có thể được thay đổi bằng cách gọi setFillColor().

Độ rộng nét

Chiều rộng của nét vẽ đường kẻ, dưới dạng số thực tính bằng pixel (px). Chiều rộng không chia tỷ lệ khi bản đồ được thu phóng (tức là một hình dạng sẽ có cùng chiều rộng nét vẽ ở tất cả mức thu phóng). Đặt thuộc tính này trên đối tượng tuỳ chọn của hình dạng bằng cách gọi *Options.strokeWidth() (hoặc PolylineOptions.width() cho một hình nhiều đường). Nếu không chỉ định, nét vẽ mặc định có là 10 pixel.

Sau khi hình dạng được thêm vào bản đồ, bạn có thể truy cập chiều rộng nét vẽ bằng cách gọi getStrokeWidth() (hoặc getWidth() cho một hình nhiều đường) và có thể thay đổi bằng cách gọi setStrokeWidth() (setWidth() for a polyline).

Mẫu nét

Mẫu nét vẽ mặc định là một đường liền nét cho hình nhiều đường và cho đường viền của đa giác cũng như vòng tròn. Bạn có thể chỉ định mẫu nét vẽ tuỳ chỉnh của đối tượng PatternItem, trong đó mỗi mục là một dấu gạch ngang, một dấu chấm hoặc một khoảng trống.

Mẫu sau đây đặt mẫu cho một hình nhiều đường thành một chuỗi lặp lại của một dấu chấm, tiếp theo là một khoảng trống có độ dài 20 pixel, một dấu gạch ngang có độ dài 30 pixel và một khoảng trống 20 pixel khác.

Java


List<PatternItem> pattern = Arrays.asList(
    new Dot(), new Gap(20), new Dash(30), new Gap(20));
polyline.setPattern(pattern);

      

Kotlin


val pattern = listOf(
    Dot(), Gap(20F), Dash(30F), Gap(20F)
)
polyline.pattern = pattern

      

Mẫu lặp lại dọc theo đường kẻ, bắt đầu với mục mẫu đầu tiên ở đỉnh đầu tiên được chỉ định cho hình dạng.

Các loại mối nối

Đối với hình nhiều đường và đường viền của đa giác, bạn có thể chỉ định JointType hình xiên hoặc tròn để thay thế kiểu khớp nối góc cố định mặc định.

Mẫu sau đây áp dụng loại khớp tròn cho hình nhiều đường:

Java


polyline.setJointType(JointType.ROUND);

      

Kotlin


polyline.jointType = JointType.ROUND

      

Loại khớp ảnh hưởng đến các đường uốn bên trong của đường. Nếu đường có nét gạch bao gồm dấu gạch ngang, loại mối nối cũng áp dụng khi dấu gạch ngang nối giữa một điểm nối. Các kiểu kết hợp không ảnh hưởng đến các dấu chấm vì chúng luôn có hình tròn.

Viết hoa dòng

Bạn có thể chỉ định một kiểu Cap cho mỗi đầu của một hình nhiều đường. Các tuỳ chọn là mông (mặc định), hình vuông, tròn hoặc bitmap tuỳ chỉnh. Đặt kiểu trong PolylineOptions.startCapPolylineOptions.endCap hoặc sử dụng các phương thức getter và setter thích hợp.

Đoạn mã sau đây chỉ định hình tròn ở đầu một hình nhiều đường.

Java


polyline.setStartCap(new RoundCap());

      

Kotlin


polyline.startCap = RoundCap()

      

Đoạn mã sau đây chỉ định một bitmap tuỳ chỉnh cho hình tĩnh:

Java


polyline.setEndCap(
    new CustomCap(BitmapDescriptorFactory.fromResource(R.drawable.arrow), 16));

      

Kotlin


polyline.endCap = CustomCap(BitmapDescriptorFactory.fromResource(R.drawable.arrow), 16F)

      

Khi sử dụng bitmap tuỳ chỉnh, bạn nên chỉ định chiều rộng nét vẽ tham chiếu tính bằng pixel. API sẽ điều chỉnh bitmap theo tỷ lệ cho phù hợp. Chiều rộng nét vẽ tham chiếu là chiều rộng nét bạn sử dụng khi thiết kế hình ảnh bitmap cho nắp, ở kích thước gốc của hình ảnh. Chiều rộng nét vẽ tham chiếu mặc định là 10 pixel. Gợi ý: Để xác định chiều rộng nét vẽ tham chiếu, hãy mở hình ảnh bitmap ở mức phóng to 100% trong trình chỉnh sửa hình ảnh và vẽ đồ thị chiều rộng mong muốn của nét vẽ đường liên quan đến hình ảnh.

Nếu bạn sử dụng BitmapDescriptorFactory.fromResource() để tạo bitmap, hãy đảm bảo bạn sử dụng tài nguyên không phụ thuộc vào mật độ (nodpi).

Mảng địa cầu

Chế độ cài đặt trắc địa chỉ áp dụng cho hình nhiều đường và đa giác. Lớp này không áp dụng cho các vòng kết nối vì chúng không được xác định là một tập hợp các phân đoạn.

Chế độ cài đặt trắc địa xác định cách vẽ các đoạn đường giữa các đỉnh liên tiếp của hình đa giác/đa giác. Các phân đoạn trắc địa là các phân đoạn đi theo đường ngắn nhất dọc theo bề mặt Trái đất (một hình cầu) và thường xuất hiện dưới dạng các đường cong trên bản đồ có phép chiếu FLEDGEr. Các đoạn không mang tính trắc địa được vẽ dưới dạng đường thẳng trên bản đồ.

Đặt thuộc tính này trên đối tượng tuỳ chọn của hình dạng bằng cách gọi *Options.geodesic(), trong đó true cho biết các đoạn cần được vẽ dưới dạng địa lý và false cho biết các đoạn cần được vẽ ở dạng đường thẳng. Nếu không chỉ định, giá trị mặc định sẽ là đoạn không địa lý (false).

Sau khi hình dạng được thêm vào bản đồ, bạn có thể truy cập vào chế độ cài đặt trắc địa bằng cách gọi isGeodesic() và có thể thay đổi bằng cách gọi setGeodesic().

Chỉ mục Z

Chỉ mục z chỉ định thứ tự ngăn xếp của hình dạng này, so với các lớp phủ khác (hình dạng khác, lớp phủ trên mặt đất và lớp phủ xếp kề) trên bản đồ. Lớp phủ có chỉ mục z cao được vẽ bên trên các lớp phủ có chỉ mục z thấp hơn. Hai lớp phủ có cùng chỉ mục z được vẽ theo thứ tự tuỳ ý.

Lưu ý rằng điểm đánh dấu luôn được vẽ phía trên các lớp phủ khác, bất kể chỉ mục z của các lớp phủ khác là gì.

Đặt thuộc tính này trên đối tượng tuỳ chọn của hình dạng bằng cách gọi *Options.zIndex(). Nếu không chỉ định, chỉ mục z mặc định sẽ là 0. Sau khi hình dạng được thêm vào bản đồ, chỉ mục z có thể được truy cập bằng cách gọi getZIndex() và có thể được thay đổi bằng cách gọi setZIndex().

Chế độ hiển thị

Chế độ hiển thị sẽ chỉ định xem hình dạng có nên được vẽ trên bản đồ hay không, trong đó true cho biết cần vẽ và false cho biết không nên vẽ hình dạng đó. Công cụ này cho phép bạn tạm thời không hiển thị hình dạng trên bản đồ. Để xoá vĩnh viễn hình dạng khỏi bản đồ, hãy gọi remove() trên hình dạng đó.

Đặt thuộc tính này trên đối tượng tuỳ chọn của hình dạng bằng cách gọi *Options.visible(). Nếu không chỉ định, chế độ hiển thị mặc định là true. Sau khi hình dạng được thêm vào bản đồ, bạn có thể truy cập chế độ hiển thị bằng cách gọi isVisible() và có thể thay đổi bằng cách gọi setVisible().

Liên kết dữ liệu với hình dạng

Bạn có thể lưu trữ một đối tượng dữ liệu tuỳ ý có hình nhiều đường, đa giác hoặc hình tròn bằng cách sử dụng phương thức setTag() của hình dạng và truy xuất đối tượng bằng getTag(). Ví dụ: gọi Polyline.setTag() để lưu trữ đối tượng dữ liệu có hình nhiều đường và gọi Polyline.getTag() để truy xuất đối tượng dữ liệu.

Mã dưới đây xác định một thẻ tuỳ ý (A) cho hình nhiều đường được chỉ định:

Java


Polyline polyline = map.addPolyline((new PolylineOptions())
    .clickable(true)
    .add(new LatLng(-35.016, 143.321),
        new LatLng(-34.747, 145.592),
        new LatLng(-34.364, 147.891),
        new LatLng(-33.501, 150.217),
        new LatLng(-32.306, 149.248),
        new LatLng(-32.491, 147.309)));

polyline.setTag("A");

      

Kotlin


val polyline = map.addPolyline(
    PolylineOptions()
        .clickable(true)
        .add(
            LatLng(-35.016, 143.321),
            LatLng(-34.747, 145.592),
            LatLng(-34.364, 147.891),
            LatLng(-33.501, 150.217),
            LatLng(-32.306, 149.248),
            LatLng(-32.491, 147.309)
        )
)
polyline.tag = "A"

      

Sau đây là một số ví dụ về các trường hợp mà bạn nên lưu trữ và truy xuất dữ liệu kèm theo các hình dạng:

  • Ứng dụng của bạn có thể phục vụ cho các loại hình dạng khác nhau và bạn muốn xử lý các hình dạng đó theo cách khác nhau khi người dùng nhấp vào chúng.
  • Bạn có thể đang tương tác với một hệ thống có giá trị nhận dạng bản ghi duy nhất, trong đó các hình dạng biểu thị các bản ghi cụ thể trong hệ thống đó.
  • Dữ liệu hình dạng có thể cho biết mức độ ưu tiên để xác định chỉ mục z cho hình dạng đó.