HarmonyOS 自定义组件如何绘制一个三角

如下图:

HarmonyOS 自定义组件如何绘制一个三角 -鸿蒙开发者社区

HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
superinsect

可以根据文字内容长度来计算canvas的宽度,参考示例:

// xxx.ets
@Entry
@Component
struct Clip {
  private settings: RenderingContextSettings = new RenderingContextSettings(true)
  private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings)
  private offCanvas: OffscreenCanvas = new OffscreenCanvas(600, 600)
  @State fillText: string = 'Canvas Clip'
  //获取文本长度*字体大小 +20是预留三角形位置,可根据效果自定义
  @State canvasWidth: number = this.fillText.length * px2vp(80) + 20

  build() {
    Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {
      Canvas(this.context)
        .height(50)
        .width(this.canvasWidth)
        .backgroundColor(Color.Red)
        .onReady(() => {
          let offContext = this.offCanvas.getContext("2d", this.settings)
          let region = new Path2D()
          region.moveTo(this.canvasWidth - 20, 25) //三角形顶点位置
          region.lineTo(this.canvasWidth, 0) //三角形上底角位置
          region.lineTo(this.canvasWidth, 50) //三角形下底角位置
          region.closePath()
          offContext.clip(region, "evenodd")
          offContext.fillStyle = Color.White
          offContext.fillRect(0, 0, 200, 200)
          let image = this.offCanvas.transferToImageBitmap()
          this.context.transferFromImageBitmap(image)
          this.context.font = '80px sans-serif bolder'
          this.context.fillStyle = Color.White
          this.context.fillText(this.fillText, 0, 35)
        })
    }
    .width('100%')
    .height('100%')
    .backgroundColor(Color.Gray)
  }
}
分享
微博
QQ
微信
回复
1天前
相关问题
hi3861三角函数无法使用问题
6879浏览 • 2回复 待解决
如何实现一个自定义询问框
444浏览 • 1回复 待解决
如何自定义函数中创建一个UI组件
1839浏览 • 1回复 待解决
HarmonyOS 实现一个自定义分类列表
318浏览 • 1回复 待解决
如何快速开发出一个自定义弹窗?
410浏览 • 1回复 待解决
HarmonyOS一个自定义的tabs冲突
38浏览 • 1回复 待解决
如何封装一个自定义Dialog对话框
2253浏览 • 1回复 待解决
如何实现一个自定义样式的toast提示
2004浏览 • 1回复 待解决
如何在全局实现一个自定义dialog弹窗
2851浏览 • 1回复 待解决
实现一个自定义动画,出现丢帧问题
417浏览 • 1回复 待解决
使用自定义函数创建一个UI组
383浏览 • 1回复 待解决
怎样实现一个自定义播放器?
378浏览 • 1回复 待解决
如何添加一个自定义的代码文件夹
462浏览 • 1回复 待解决