HarmonyOS 画布问题咨询

问题描述:

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/drawing-js-guidelines-V5

按照这个页面 复制开发代码。

const canvas = context.canvas

报错。

context的引用是什么没有给。

案例可不可以写的好点。

HarmonyOS
2024-10-21 09:58:36
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

您可以看一下开发步骤:需要添加开发依赖

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/drawing-js-guidelines-V5#开发步骤

您在添加完开发依赖之后可以参考以下demo:

import { NodeController, FrameNode, RenderNode, DrawContext } from "@ohos.arkui.node"  
import { UIContext } from '@ohos.arkui.UIContext'  
import drawing from "@ohos.graphics.drawing"  
import common2D from '@ohos.graphics.common2D'  
  
@Entry  
@Component  
struct RenderTest {  
  private myNodeController: MyNodeController = new MyNodeController()  
  
  
  build() {  
    Column() {  
      Row() {  
        NodeContainer(this.myNodeController)  
          .height('100%')  
        Button("矩形")  
          .margin({ bottom: 200, right: 12 })  
          .onClick(() => {  
            this.myNodeController.clearNodes()  
            this.myNodeController.addNode(rectNode)  
          })  
      }  
      .width('100%')  
      .justifyContent(FlexAlign.Center)  
      .shadow(ShadowStyle.OUTER_DEFAULT_SM)  
      .alignItems(VerticalAlign.Bottom)  
      .layoutWeight(1)  
    }  
  }  
}  
  
//6.绘制矩形。使用canvas中的drawRect接口绘制矩形。  
class RectRenderNode extends RenderNode {  
  async draw(context: DrawContext) {  
    const canvas = context.canvas  
    const brush = new drawing.Brush()  
    brush.setColor({alpha: 255, red: 0, green: 255, blue: 0})  
  
    const pen = new drawing.Pen()  
    pen.setStrokeWidth(10)  
    pen.setColor({alpha: 255, red: 255, green: 255, blue: 0})  
    canvas.attachPen(pen)  
    canvas.attachBrush(brush)  
    //矩形区域,通过2个坐标点可以描述出一个矩形区域,这2个点分别认为是矩形区域的左上角点与右下角点。  
    canvas.drawRect({ left : 50, right : 300, top : 300, bottom : 600})  
  }  
}  
// 创建一个RectRenderNode对象  
const rectNode = new RectRenderNode()  
// 定义rectNode的像素格式  
rectNode.frame = { x: 90, y: 100, width: 200, height: 800 }  
rectNode.pivot = { x: 0.2, y: 0.8 }  
rectNode.scale = { x: 1, y: 1 }  
//8.创建NodeController子类。  
// 创建NodeController的子类MyNodeController,并在其中定义创建FrameNode的函数。  
// NodeController定义了节点容器的控制器,控制着容器里在生命周期中的节点。FrameNode定义了节点的基本类型,并包含一个RenderNode。  
class MyNodeController extends NodeController {  
  private rootNode: FrameNode | null = null;  
  
  makeNode(uiContext: UIContext): FrameNode {  
    this.rootNode = new FrameNode(uiContext)  
    if (this.rootNode == null) {  
      return this.rootNode  
    }  
    const renderNode = this.rootNode.getRenderNode()  
    if (renderNode != null) {  
      renderNode.frame = { x: 0, y: 0, width: 10, height: 500 }  
      renderNode.pivot = { x: 50, y: 50 }  
    }  
    return this.rootNode  
  }  
  
  //9.创建添加节点的接口。在第8步中创建的MyNodeController类中创建添加RenderNode的接口。  
  addNode(node: RenderNode): void {  
    if (this.rootNode == null) {  
      return  
    }  
    const renderNode = this.rootNode.getRenderNode()  
    if (renderNode != null) {  
      renderNode.appendChild(node)  
    }  
  }  
  
  //10.创建删除节点的接口。在第8步中创建的MyNodeController类中创建删除RenderNode的接口。  
  clearNodes(): void {  
    if (this.rootNode == null) {  
      return  
    }  
    const renderNode = this.rootNode.getRenderNode()  
    if (renderNode != null) {  
      renderNode.clearChildren()  
    }  
  }  
}
分享
微博
QQ
微信
回复
2024-10-21 15:54:45
相关问题
HarmonyOS卡片问题咨询
243浏览 • 1回复 待解决
HarmonyOS 录像问题咨询
345浏览 • 1回复 待解决
HarmonyOS 系统picker问题咨询
317浏览 • 1回复 待解决
HarmonyOS 崩溃收集问题咨询
379浏览 • 1回复 待解决
HarmonyOS AOT相关问题咨询
308浏览 • 1回复 待解决
HarmonyOS 媒体问题相关咨询
87浏览 • 1回复 待解决
HarmonyOS image resizable问题咨询
302浏览 • 1回复 待解决
HarmonyOS getRawFileContent使用问题咨询
486浏览 • 1回复 待解决
HarmonyOS 音频播放相关问题咨询
99浏览 • 1回复 待解决
mapkitxiang 问题咨询
227浏览 • 1回复 待解决
HarmonyOS 推送分类申请失败问题咨询
298浏览 • 1回复 待解决
HarmonyOS对于权限类的问题咨询
319浏览 • 1回复 待解决
画布绘制文字,垂直居中
238浏览 • 1回复 待解决
HarmonyOS TextInput和键盘相关问题咨询
432浏览 • 1回复 待解决
HarmonyOS 媒体硬解相关问题咨询
464浏览 • 1回复 待解决
HarmonyOS Web组件开发问题咨询
150浏览 • 1回复 待解决
requestInStream使用问题咨询
569浏览 • 1回复 待解决
jsBridge相关问题咨询
319浏览 • 1回复 待解决
AppGallery Connect问题咨询
244浏览 • 1回复 待解决
HarmonyOS开发过程应用内存问题咨询
260浏览 • 1回复 待解决
HarmonyOS 关于router.back问题咨询
350浏览 • 1回复 待解决
HarmonyOS保存图片到系统相册问题咨询
517浏览 • 1回复 待解决
HarmonyOS 关于Provide数据传递问题咨询
318浏览 • 1回复 待解决
咨询下WebSocket相关问题
346浏览 • 1回复 待解决
提问
该提问已有0人参与 ,帮助了0人