文档管理中心

路径规划场景中绘制颜色渐变的路径,颜色不生效问题如何解决

问题现象

地图两点之间需要绘制一条颜色渐变的多点折线,设置MapPolylineOptions.colors数组,渐变样式不生效。

背景知识

  • 初始化地图:新建地图初始化参数mapOptions,设置地图中心点坐标及层级。通过callback回调的方式获取MapComponentController对象,用来操作地图。调用MapComponent组件,传入mapOptions和callback参数,初始化地图。详见显示地图
  • 绘制折线:新建折线时在MapPolylineOptions的colors属性中设置折线分段颜色值,详见折线

问题定位

绘制颜色渐变的折线,首先要绘制折线,并设置折线的颜色渐变。这里颜色渐变不生效,可能是MapPolylineOptions.gradient或MapPolylineOptions.colors设置不正确。

分析结论

MapPolylineOptions.gradient要设置为true,开启过渡色。MapPolylineOptions.colors数组长度要等于折线点数量,以确保每段折线都有过渡色。数组长度小于折线点数量会导致后半段折线缺少过渡色而显示默认颜色。

修改建议

MapPolylineOptions.colors过渡段颜色数组,会按照折线点顺序依次取色。MapPolylineOptions.gradient设置为true,两个折线点之间颜色会呈现过渡色。

收起
自动换行
深色代码主题
复制
  1. import { map, mapCommon, MapComponent } from '@kit.MapKit';
  2. import { AsyncCallback } from '@kit.BasicServicesKit';
  3. // 地图折线点的坐标数组
  4. const markers: Array<mapCommon.LatLng> =
  5. [{ longitude: 121.47, latitude: 31.23 }, { longitude: 121.43, latitude: 31.18 },
  6. { longitude: 121.46, latitude: 31.13 }, { longitude: 121.43, latitude: 31.05 },
  7. { longitude: 121.34, latitude: 31.02 }];
  8. @Entry
  9. @Component
  10. struct HwMapDrawPage {
  11. private mapOption?: mapCommon.MapOptions; // 地图参数
  12. private mapController?: map.MapComponentController; // 地图组件控制器
  13. private callback?: AsyncCallback<map.MapComponentController>; // 地图初始化回调
  14. aboutToAppear(): void {
  15. this.mapOption = {
  16. position: {
  17. target: {
  18. longitude: 121.47, latitude: 31.23 // 地图中心坐标
  19. },
  20. zoom: 11, // 屏幕中心的缩放级别
  21. }
  22. };
  23. // 地图初始化的回调
  24. this.callback = async (err, mapController) => {
  25. if (!err) {
  26. this.mapController = mapController;
  27. }
  28. };
  29. }
  30. build() {
  31. Column() {
  32. MapComponent({ mapOptions: this.mapOption, mapCallback: this.callback })
  33. .width('100%')
  34. .height('80%')
  35. Column() {
  36. Button('划线').onClick(async () => {
  37. // 绘制颜色渐变折线
  38. // polyline初始化参数
  39. let polylineOption: mapCommon.MapPolylineOptions = {
  40. points: markers, // 折线点坐标的数组
  41. clickable: true, // 折线可点击
  42. startCap: mapCommon.CapStyle.BUTT, // 折线起始顶点的样式
  43. endCap: mapCommon.CapStyle.BUTT, // 折线结束顶点的样式
  44. geodesic: false, // 折线线段是否为大地曲线
  45. jointType: mapCommon.JointType.BEVEL, // 折线的线条拐角样式
  46. visible: true,
  47. width: 10,
  48. zIndex: 10,
  49. gradient: true, // 颜色过渡开启
  50. colors: [0xffffff00, 0xff000000, 0xffCCCCCC, 0xffCF0983, 0xffee0000] // 过渡段颜色数组对应markers数组
  51. /**
  52. colors:[0xffffff00,0xff000000] // 过渡段颜色数组数量少于折线点数量,后半段颜色无渐变效果
  53. */
  54. };
  55. // 创建polyline
  56. await this.mapController?.addPolyline(polylineOption);
  57. })
  58. Button('marker').onClick(async () => {
  59. // 绘制多个坐标点的标记
  60. for (let i = 0; i < markers.length; i++) {
  61. // Marker初始化参数
  62. let markerOptions: mapCommon.MarkerOptions = {
  63. position: {
  64. latitude: markers[i].latitude, // 标记点坐标
  65. longitude: markers[i].longitude
  66. },
  67. rotation: 0, // 标记点旋转角度
  68. visible: true,
  69. zIndex: 0,
  70. alpha: 0.9, // 标记点透明度
  71. anchorU: 0.5, // 锚点水平坐标
  72. anchorV: 1, // 锚点垂直坐标
  73. clickable: true, // 是否可点击
  74. draggable: true, // 是否可拖拽
  75. flat: false // 是否平贴地图
  76. };
  77. await this.mapController?.addMarker(markerOptions);
  78. }
  79. })
  80. }
  81. }
  82. .height('100%')
  83. .width('100%')
  84. }
  85. }

总结

绘制颜色渐变的路径需要注意以下几点:

  1. 显示地图要在AGC上开通地图服务,地图服务刚开通需24小时后生效。详见Map Kit开发准备
  2. module.json5配置client_id。打包使用手动签名,签名指纹要与AGC上一致。详见Map Kit开发准备
  3. 折线参数gradient设置为true,colors数组长度要等于折线点数量以保证每段折线都有过渡色。
在 FAQ 中进行搜索
请输入您想要搜索的关键词