HarmonyOS鸿蒙Next中饼形图刷新
HarmonyOS鸿蒙Next中饼形图刷新
咨询描述: 如何实时刷新饼形图数据
以下为饼形图代码CustomPieChart:
@Component
export struct CustomPieChart {
// 饼图数据
@State picChartElements: PicChartElement[] = []
// 圆半径
@State circle_radius: number = 50
// 单位
@State unit: string = ""
// 获取上下文
private settings: RenderingContextSettings = new RenderingContextSettings(true)
private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
aboutToAppear() {
let total = 0
// 统计总数量
this.picChartElements.forEach(value => {
total += value.quantity
})
// 初始化 弧线的终止弧度
let lastEndAngle = -0.5 * Math.PI
// 封装饼图数据
this.picChartElements.forEach(value => {
// 占用百分比
let percent = value.quantity / total
// 四舍五入,获取整数
value.percent = Math.round(percent * 100)
// 初始化终止弧度为 弧线的起始弧度
value.beginAngle = lastEndAngle
// 计算弧线的终止弧度
value.endAngle = (percent * 2 * Math.PI) + lastEndAngle
// 赋值终止弧度为变量,作为下次的起始弧度
lastEndAngle = value.endAngle
// 返回封装好的对象
return value
})
}
build() {
Column() {
Canvas(this.context)
// 高度为半径2倍
.height(this.circle_radius * 2)
// 纵横比,宽度和高度一样
.aspectRatio(1)
// 画布组件的事件回调,可以在此时进行绘制
.onReady(() => {
this.picChartElements.forEach(item => {
// 创建一个新的控制路径
this.context.beginPath()
// 路径从当前点移动到指定点
this.context.moveTo(this.circle_radius, this.circle_radius)
// 绘制弧线路径(弧线圆心的x坐标值,弧线圆心的y坐标值,弧线的圆半径,弧线的起始弧度,弧线的终止弧度)
this.context.arc(this.circle_radius, this.circle_radius, this.circle_radius, item.beginAngle, item.endAngle)
// 指定绘制的填充色
this.context.fillStyle = item.color
// 对封闭路径进行填充
this.context.fill()
})
})
}
.height('100%')
}
}
export class PicChartElement {
quantity: number // 数量
percent: number = 0 // 百分比
beginAngle: number = 0 // 弧线的起始弧度
endAngle: number = 0 // 弧线的终止弧度
color: string // 颜色
constructor(quantity: number, color: string) {
this.quantity = quantity
this.color = color
}
}
在另一个页面调用饼形图DVRVideoSettingPage:
@Component
struct DVRVideoSettingPage {
@State mCameraMenuCardInfoLifeTimeTotal: number = 10
@State mCameraMenuCardInfoLifeTime: number = 1
// 饼图数据
@State picChartElements2: PicChartElement[] = [
new PicChartElement(this.mCameraMenuCardInfoLifeTimeTotal, '#32B16C'),
new PicChartElement(this.mCameraMenuCardInfoLifeTime, '#474EE7')
]
build {
CustomPieChart({picChartElements: this.picChartElements2, circle_radius: 54, unit: ''})
}
//获取存储卡信息
async deviceCameraSettingValue() {
let commandURL: string =
ConnectDVRWiFiUtils.getDeviceCgiPathURI(DVRCommandURI.CameraMenuCardInfo)
await MyAxiosUtil.makeRequest(getContext(this), commandURL, AxiosRequestMethod.GET, {}, AxiosBaseURLType.SPECIAL,
(result) => {
if (result != null) {
if (result.includes("0\\nOK\\n")) {
const lines = result.split('\\n');
for (let i = 0; i < lines.length; i++) {
if(lines[i].startsWith(DVRCommandURI.CameraMenuCardInfoLifeTimeTotal)) {
// 保留一位小数
this.mCameraMenuCardInfoLifeTimeTotalGB = Number.parseFloat(lines[i].split(DVRCommandURI.CameraMenuCardInfoLifeTimeTotal)[1]).toFixed(1) + 'GB'
this.mCameraMenuCardInfoLifeTimeTotal = Number.parseFloat(lines[i].split(DVRCommandURI.CameraMenuCardInfoLifeTimeTotal)[1])
} else if(lines[i].startsWith(DVRCommandURI.CameraMenuCardInfoRemainLifeTime)) {
// 保留一位小数
this.mCameraMenuCardInfoLifeTimeGB = Number.parseFloat(lines[i].split(DVRCommandURI.CameraMenuCardInfoRemainLifeTime)[1]).toFixed(1) + 'GB'
this.mCameraMenuCardInfoLifeTime = Number.parseFloat(lines[i].split(DVRCommandURI.CameraMenuCardInfoRemainLifeTime)[1])
}
}
} else {
ToastUtils.showToast($r('app.string.toast_command_failed'))
}
}
}, (error) => {
ToastUtils.showToast($r('app.string.toast_command_failed'))
})
}
mCameraMenuCardInfoLifeTimeTotal与mCameraMenuCardInfoLifeTime是可变化的,饼形图如何根据这两个值的变化而变化
更多关于HarmonyOS鸿蒙Next中饼形图刷新的实战教程也可以访问 https://www.itying.com/category-93-b0.html
可以尝试使用@Link 和 @Watch 来对 mCameraMenuCardInfoLifeTimeTotal 与 mCameraMenuCardInfoLifeTime 这两个属性进行侦听,当 @Watch 发现参数发生变化时,刷新饼图信息。文档请参考:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-watch-V5
更多关于HarmonyOS鸿蒙Next中饼形图刷新的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,饼形图的刷新通常通过数据驱动的方式实现。开发者可以通过更新数据源来触发饼形图的重新渲染。具体步骤如下:
-
数据源更新:首先,开发者需要更新饼形图的数据源。数据源通常是一个包含各个扇区数值的数组或对象列表。更新数据源后,系统会自动检测到数据变化。
-
UI刷新:一旦数据源发生变化,HarmonyOS的UI框架会自动触发饼形图的刷新。开发者无需手动调用刷新方法,系统会根据新的数据重新绘制饼形图。
-
动画效果:在刷新过程中,鸿蒙系统支持平滑的过渡动画效果。开发者可以通过设置动画参数来控制刷新时的视觉效果,如动画持续时间、缓动函数等。
-
性能优化:为了确保饼形图刷新时的性能,建议尽量减少频繁的数据源更新操作。可以通过批量更新数据或使用异步操作来优化刷新性能。
总结来说,HarmonyOS鸿蒙Next中饼形图的刷新是通过数据驱动的,开发者只需更新数据源,系统会自动处理UI刷新和动画效果。
在HarmonyOS鸿蒙Next中,刷新饼形图可以通过更新数据源并重新渲染图表来实现。首先,确保你的数据源是可变的,比如使用@State
装饰器标记。然后,在需要刷新时,更新数据源的内容。最后,调用图表的update()
方法或重新设置数据源,触发UI重新渲染。示例代码如下:
@State private data: Array<number> = [30, 40, 30];
updateChart() {
this.data = [50, 30, 20]; // 更新数据
}
在UI中绑定数据源:
PieChart({ data: this.data })
调用updateChart()
方法即可刷新饼形图。