HarmonyOS 鸿蒙Next怎么实现不是整个圆的圆形进度条呢

发布于 1周前 作者 songsunli 来自 鸿蒙OS

HarmonyOS 鸿蒙Next怎么实现不是整个圆的圆形进度条呢
需要实现一个差不多3/4个圆的圆形进度条,能实现出来吗

效果类似下图,还需要再中间写文字

image.png


更多关于HarmonyOS 鸿蒙Next怎么实现不是整个圆的圆形进度条呢的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

3 回复

扇形进度条可以参考如下demo:

@Entry
@Component
export struct WidgetsProgress {
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  private offCanvas: OffscreenCanvas = new OffscreenCanvas(600, 600)
  @State @Watch('onCountUpdated') radianTest: number = 0
  @State color: string = '#ff8c909b'
  onCountUpdated(): void {
    this.canvasTest()
  }
  canvasTest = (): void => {
    let offContext = this.offCanvas.getContext('2d', this.settings)
    offContext.lineCap = 'round'
    offContext.lineWidth = 8
    offContext.beginPath()
    offContext.arc(
      100,
      75,
      50,
      (225 - 90) * Math.PI / 180,
      (135 - 90) * Math.PI / 180
    )
    offContext.strokeStyle = '#ff8c909b'
    offContext.stroke()
    offContext.beginPath()
    offContext.arc(
      100,
      75,
      50,
      (225 - 90) * (Math.PI / 180),
      this.radianTest === 0 ? (135 - 90) * (Math.PI / 180) : (135 - 270 * (1 - this.radianTest) - 90) * (Math.PI / 180),
    )
    offContext.strokeStyle = this.color
    offContext.stroke()
    let image = this.offCanvas.transferToImageBitmap()
    this.context.transferFromImageBitmap(image)
  }
  build() {
    NavDestination() {
      Column() {
        Canvas(this.context)
          .width('100%')
          .height('100%')
          .backgroundColor('#ffff00')
          .onReady(
            this.canvasTest
          )
        Button('test')
          .onClick(() => {
            this.color = '#ff144cd2'
            this.radianTest = Number(this.radianTest + 0.01)
            if (this.radianTest > 1) {
              this.radianTest = 0
            }
          })
      }
      .width('100%')
      .height(500)
    }
  }
}

更多关于HarmonyOS 鸿蒙Next怎么实现不是整个圆的圆形进度条呢的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


直接使用系统提供的Gauge数据量规图表组件

Gauge({ value: 50, min: 1, max: 100 }) {
  //value:当前值,min:最小值,max:最大值
  Column() {
    Text('50')
      //辅助文本
      .fontWeight(FontWeight.Medium)
      .fontColor("#ff182431")
      .width('60%')
      .textAlign(TextAlign.Center)
      .margin({ top: '30%' })
  }
  .width('100%')
  .height('100%')
}
.startAngle(225)
//设置开始角度
.endAngle(135)
//设置结束角度
.colors(Color.Red)
//颜色
.width('80%')
.height('80%')
.indicator(null)
//不显示指示器

在HarmonyOS(鸿蒙)中,要实现不是整个圆的圆形进度条,可以通过自定义绘制的方式来实现。具体步骤如下:

  1. 定义Canvas和Paint: 创建一个自定义View,在onDraw方法中使用Canvas和Paint对象进行绘制。Paint对象可以设置颜色、样式等属性。

  2. 计算圆弧的起始和结束角度: 根据进度条的值计算出圆弧的起始角度和结束角度。例如,如果进度条的最大值为100,当前进度为50,则起始角度为-90度(从顶部开始),结束角度为45度(顺时针方向)。

  3. 绘制圆弧: 使用Canvas的drawArc方法,根据计算出的起始角度和结束角度绘制圆弧。可以通过设置Paint的setStyle为Paint.Style.STROKE来绘制空心圆弧。

  4. 调整View大小: 确保自定义View的大小足够容纳所绘制的圆弧。可以通过重写onMeasure方法来设置View的宽高。

  5. 更新进度: 当进度值变化时,调用invalidate方法重新绘制View,以更新圆弧的显示。

通过上述步骤,你可以在HarmonyOS中实现一个不是整个圆的圆形进度条。请注意,具体的实现细节可能需要根据实际需求进行调整。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部