Polyline组件如何绘制渐变区域? 官方
头像 鸿蒙小助手 2026-04-14 15:56:29    发布
6272 浏览 38 点赞 3 收藏

本问答帖原创发布在华为开发者联盟社区 ,欢迎开发者前往论坛提问交流。

更多与该问题相关的讨论,请点击原帖查看:

Polyline组件如何绘制渐变区域?-华为开发者问答 | 华为开发者联盟 (huawei.com)

问题描述:

如何使用Polyline组件、Polygon组件、Path组件,实现描绘折线后,折线以下区域呈现渐变效果?

解决方案:

【背景知识】

  • mpchart是一个包含各种类型图表的图表库,主要用于业务数据汇总,例如销售数据走势图、股价走势图等场景中使用。方便开发者快速实现图表UI。mpchart主要包括线形图、柱状图、饼状图、蜡烛图、气泡图、雷达图、瀑布图等自定义图表库。
  • setGradientFillColor用于设置折线图下方区域为渐变色。

【解决方案】
使用mpchart画出LineChart折线,再通过setGradientFillColor来设置填充颜色,参考示例:

import {
 JArrayList, // 工具类:数据集合
 Description, // 图表描述标签
 Legend, // 图表Legend(图例)部件
 EntryOhos,// 图表数据结构基础类
 LineDataSet, // 线形图数据集合
 ILineDataSet, // 线形图数据集合的操作类
 LineData, // 线形图数据包
 Mode, // 线形图形状
 LineChart, // 线形图图表类
 LineChartModel,// 线形图配置构建类
 ChartColorStop, // 颜色类
 MarkerView, // 图例形状
} from '@ohos/mpchart';
@Entry
@Component
struct TestPage {
 @State model: LineChartModel = new LineChartModel();
 @State dataSet: LineDataSet = new LineDataSet(null, 'DataSet');
 @State normalMarker: MarkerView = new MarkerView();
 aboutToAppear() {
 // 初始化图表配置构建类
 this.model = new LineChartModel();
 // 获取图表描述部件,设置图表描述部件不可用,即图表不进行绘制描述部件
 let description: Description | null = this.model.getDescription()
 if (description) {
 description.setEnabled(false);
 }
 let legend: Legend | null = this.model.getLegend();
 if (legend) {
 legend.setEnabled(false);
 }
 // 设置图表数据最大的绘制数,如果超过该数值,则不进行绘制图表的数值标签
 this.model.setMaxVisibleValueCount(10);
 // 设置图表左Y轴信息
 let leftAxis = this.model.getAxisLeft();
 if (leftAxis) {
 leftAxis.setEnabled(false)
 }
 // 设置图表右Y轴信息
 let rightAxis = this.model.getAxisRight();
 if (rightAxis) {
 rightAxis.setEnabled(false);
 }
 // 设置X轴信息
 let xAxis = this.model.getXAxis();
 if (xAxis) {
 xAxis.setEnabled(false)
 }
 // 为图表设置markerView
 this.normalMarker = new MarkerView();
 this.model.setMarker(this.normalMarker);
 // 生成图表数据
 let lineData: LineData = this.getLineData();
 // 将数据与图表配置类绑定
 this.model.setData(lineData);
 // 设置图表最大的X轴显示范围,如不设置,则默认显示全部数据
 this.model.setVisibleXRangeMaximum(20);
 }
 build() {
 Column() {
 LineChart({ model: this.model })
 .width('100%')
 .height('100%')
 }
 }
 getLineData(): LineData {
 let start: number = 1;
 let values: JArrayList<EntryOhos> = new JArrayList<EntryOhos>();
 for (let i = start; i < 20; i++) {
 let val = Number(Math.random() * 150);
 if (Math.random() * 100 < 25) {
 values.add(new EntryOhos(i, val));
 } else {
 values.add(new EntryOhos(i, val));
 }
 }
 this.dataSet = new LineDataSet(values, 'DataSet');
 this.dataSet.setHighLightColor(Color.Black);
 this.dataSet.setLineWidth(1);
 this.dataSet.setDrawIcons(false);
 this.dataSet.setMode(Mode.LINEAR); // 直线模式
 this.dataSet.setDrawCircles(false); // 折线点画圆圈
 this.dataSet.setDrawCircleHole(false); // 设置内部孔
 this.dataSet.setColorByColor(Color.Blue); // 设置折线颜色
 // 渐变色填充
 let gradientFillColor = new JArrayList<ChartColorStop>();
 gradientFillColor.add(["#0C0099CC", 0.2]);
 gradientFillColor.add(["#7F0099CC", 0.4]);
 gradientFillColor.add(["#8b0099cc", 0.6]);
 gradientFillColor.add(["#ad0099cc", 0.8]);
 gradientFillColor.add(["#0099CC", 1.0]);
 this.dataSet.setGradientFillColor(gradientFillColor);
 // 保证渐变色设置生效
 this.dataSet.setDrawFilled(true);
 // 设置数据点的颜色
 this.dataSet.setCircleColor(Color.Blue);
 // 关闭线形图的选中横竖线
 this.dataSet.setDrawHighlightIndicators(false)
 let dataSetList: JArrayList<ILineDataSet> = new JArrayList<ILineDataSet>();
 dataSetList.add(this.dataSet);
 let lineData: LineData = new LineData(dataSetList);
 return lineData
 }
}

【总结】
mpchart除了可以使用默认的图表外,还可以自定义图表类型,使用中的问题可参考
常见问题的解决


©本站发布的所有内容,包括但不限于文字、图片、音频、视频、图表、标志、标识、广告、商标、商号、域名、软件、程序等,除特别标明外,均来源于网络或用户投稿,版权归原作者或原出处所有。我们致力于保护原作者版权,若涉及版权问题,请及时联系我们进行处理。
分类
HarmonyOS
头像

鸿蒙小助手

致力于为鸿蒙开发者谋福利

1031

帖子

7

提问

13565

粉丝

关注
最新发布

MCP+Rules:AI辅助鸿蒙应用开发实践

2026-04-17 10:25:25    发布
热门推荐
地址:北京市朝阳区北三环东路三元桥曙光西里甲1号第三置业A座1508室 商务内容合作QQ:2291221 电话:13391790444或(010)62178877
版权所有:电脑商情信息服务集团 北京赢邦策略咨询有限责任公司
声明:本媒体部分图片、文章来源于网络,版权归原作者所有,我司致力于保护作者版权,如有侵权,请与我司联系删除

京ICP备:2022009079号-2

京公网安备:11010502051901号

ICP证:京B2-20230255