HarmonyOS 地图的marker怎么支持自定义布局

HarmonyOS
20h前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
Excelsior_abit

marker的icon属性支持image.PixelMap和Resource类型的。

可以根据需要绘制好样式,以图片的格式作为marker的icon传进来。比如可以自定义一个builder函数,通过componentSnapshot把builder函数转成pixelmap。详细信息和示例请参考如下地址:componentSnapshot.createFromBuilder

import { map, mapCommon, MapComponent } from '@kit.MapKit';
import { AsyncCallback } from '@kit.BasicServicesKit';
import { image } from '@kit.ImageKit';
import { componentSnapshot } from '@kit.ArkUI';

@Entry
@Component
struct CustomizationMarker {
  private mapOptions?: mapCommon.MapOptions;
  private mapController?: map.MapComponentController;
  private callback?: AsyncCallback<map.MapComponentController>;
  @State imagePixelMap: PixelMap | undefined = undefined;

  addMarker() {
    componentSnapshot.createFromBuilder(() => {
      this.RandomBuilder()
    },
      async (error: Error, pixmap: image.PixelMap) => {
        if (error) {
          console.log("error: " + JSON.stringify(error))
          return;
        }

        // Marker初始化参数
        let markerOptions: mapCommon.MarkerOptions = {
          position: {
            latitude: 31.984410259206815,
            longitude: 118.76625379397866
          },
          rotation: 0,
          visible: true,
          zIndex: 0,
          alpha: 1,
          anchorU: 0.5,
          anchorV: 1,
          clickable: true,
          draggable: true,
          flat: false,
          icon: pixmap
        };
        console.log('testTag', `addMarker`)
        this.mapController?.addMarker(markerOptions);
      })
  }

  aboutToAppear(): void {
    // 地图初始化参数
    this.mapOptions = {
      position: {
        target: {
          latitude: 31.984410259206815,
          longitude: 118.76625379397866
        },
        zoom: 15
      }
    };
    this.callback = async (err, mapController) => {
      if (!err) {
        console.log('testTag', `callback`)
        this.mapController = mapController;
        this.addMarker()
      }
    };
  }

  @Builder
  RandomBuilder() {
    Row() {
      Image($r('app.media.marker')).width(18).height(24)
      Column() {
        Text("200米")
          .fontSize(12)
          .fontColor("#1f2642")
          .fontWeight(FontWeight.Bold)
        Text("35分钟")
          .fontSize(12)
          .fontColor("#1f2642")
          .fontWeight(FontWeight.Bold)
          .margin({ top: 1 })
      }.margin({ left: 6 }).alignItems(HorizontalAlign.Start)

      Divider()
        .vertical(true)
        .width(1)
        .height(18)
        .backgroundColor("#c1cadd")
        .margin({ left: 8, right: 8 })

      Image($r('app.media.app_icon')).width(18).height(18)

      Text("导航")
        .fontSize(12)
        .fontColor("1f2642")
        .fontWeight(FontWeight.Bold)
        .margin({ left: 2 })
        .onClick(() => {
        })
    }
    .margin({ bottom: 3 })
    .padding({
      left: 6,
      right: 6,
      top: 8,
      bottom: 8
    })
    .backgroundColor(Color.White)
    .borderRadius(12)
    .shadow({ radius: 12, color: "#33000000" })
  }

  build() {
    Stack() {
      Column() {
        MapComponent({ mapOptions: this.mapOptions, mapCallback: this.callback });
      }.width('100%')
    }.height('100%')
  }
}
分享
微博
QQ
微信
回复
17h前
相关问题
HarmonyOS 地图自定义marker
204浏览 • 1回复 待解决
HarmonyOS 地图中是否支持海量marker
662浏览 • 0回复 待解决
鸿蒙怎么实现自定义布局Dialog
9358浏览 • 2回复 已解决
HarmonyOS 地图添加marker
112浏览 • 1回复 待解决
HarmonyOS 地图自定义气泡功能
141浏览 • 1回复 待解决
HarmonyOS 地图自定义弹窗消息窗
202浏览 • 1回复 待解决
HarmonyOS 如何自定义布局组件
15浏览 • 1回复 待解决
HarmonyOS 地图组件如何添加自定义UI
0浏览 • 0回复 待解决
HarmonyOS 地图自定义信息框不生效
0浏览 • 0回复 待解决
如何自定义popup弹窗布局
604浏览 • 2回复 待解决
HarmonyOS 地图中如何渲染多个marker
214浏览 • 1回复 待解决
HarmonyOS 怎么自定义TabTabbar
158浏览 • 1回复 待解决
HarmonyOS 弹窗样式能否支持自定义
222浏览 • 1回复 待解决