在 OpenHarmony 中,“图表”通常不是系统原生控件,而是通过 ArkUI(eTS / ArkTS) 自行绘制或使用第三方库来实现。下面按常见方案给你一个清晰配置说明。
适合:折线图、柱状图、饼图等基础图表
核心能力
CanvasCanvasRenderingContext2DCourses(绘制路径)常见库:
@Entry
@Component
struct ChartPage {
private context: CanvasRenderingContext2D | null = null
build() {
Column() {
Canvas(this.context)
.width('100%')
.height(300)
.onReady(() => {
this.drawLineChart()
})
}
}
}
drawLineChart() {
const ctx = this.context
if (!ctx) return
const width = 360
const height = 300
const padding = 40
const data = [20, 50, 30, 80, 60, 90]
ctx.clearRect(0, 0, width, height)
// 坐标轴
ctx.beginPath()
ctx.moveTo(padding, padding)
ctx.lineTo(padding, height - padding)
ctx.lineTo(width - padding, height - padding)
ctx.stroke()
// 折线
ctx.beginPath()
data.forEach((value, index) => {
const x = padding + index * 50
const y = height - padding - value * 2
if (index === 0) {
ctx.moveTo(x, y)
} else {
ctx.lineTo(x, y)
}
})
ctx.strokeStyle = '#007DFF'
ctx.stroke()
}
✅ 特点:
import web_webview from '@ohos.web.webview'
@Entry
@Component
struct EChartsPage {
controller: web_webview.WebviewController = new web_webview.WebviewController()
build() {
Column() {
Web({ src: $rawfile('echarts.html'), controller: this.controller })
.width('100%')
.height('100%')
}
}
}
<div id="main" style="width:100%;height:300px"></div>
<script src="echarts.min.js"></script>
<script>
const chart = echarts.init(document.getElementById('main'))
chart.setOption({
xAxis: { type: 'category', data: ['Mon','Tue','Wed'] },
yAxis: { type: 'value' },
series: [{ data: [120, 200, 150], type: 'bar' }]
})
</script>
✅ 适合:
| 项目 | 说明 |
|---|---|
| 坐标系 | 自行计算 |
| 数据绑定 | @State / AppStorage |
| 刷新 | canvas.clearRect() |
| 性能 | 控制重绘频率 |
| 适配 | 使用 vp / % |
如果你告诉我:
我可以直接给你 可运行完整 Demo。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。