145 Star 1.4K Fork 1.7K

OpenHarmony/applications_app_samples

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

Native Drawing

介绍

本示例中主要介绍开发者在利用Native XComponent来获取NativeWindow实例、获取布局/事件信息、注册事件回调并通过Drawing API实现在页面上绘制形状。功能主要包括点击按钮绘制一个五角星和“Hello World Drawing”文字。

使用说明

  1. 安装编译生成的hap包,并打开应用。

  2. 点击页面底部“Draw Path”按钮,页面将绘制一个五角星;

  3. 点击页面底部“Draw Text”按钮,页面将绘制“Hello World Drawing”。

说明 本示例XComponent接口使用方法已停止演进,推荐使用方法请参考ArkTSXComponent示例

效果预览

主页 绘制五角星 绘制文字
main Draw Path change color

工程目录

├──entry/src/main
│  ├──cpp                           // C++代码区
│  │  ├──CMakeLists.txt             // CMake配置文件
│  │  ├──hello.cpp                  // Napi模块注册
│  │  ├──common
│  │  │  └──log_common.h            // 日志封装定义文件
│  │  ├──plugin                     // 生命周期管理模块
│  │  │  ├──plugin_manager.cpp
│  │  │  └──plugin_manager.h
│  │  ├──samples                    // samples渲染模块
│  │  │  ├──sample_bitmap.cpp
│  │  │  └──sample_bitmap.h
│  ├──ets                           // ets代码区
│  │  ├──entryability
│  │  │  ├──EntryAbility.ts         // 程序入口类
|  |  |  └──EntryAbility.ets
|  |  ├──interface
│  │  │  └──XComponentContext.ts    // XComponentContext
│  │  └──pages                      // 页面文件
│  │     └──Index.ets               // 主界面
|  ├──resources         			// 资源文件目录

具体实现

通过在IDE中创建Native c++ 工程,在c++代码中定义对外接口为drawPattern和drawText,在js侧调用该接口可在页面上绘制出一个五角星和“Hello World Drawing”文字。

在XComponent的OnSurfaceCreated回调中获取NativeWindow实例并初始化NativeWindow环境。调用OH_NativeXComponent_GetXComponentSize接口获取XComponent的宽高,并以此为输入调用Drawing相关的绘制接口在NativeWindow上绘制出一个五角星和文字。

源码参考:samples目录下的文件。

涉及到的相关接口:

接口名 描述
OH_Drawing_BitmapCreate (void) 创建一个位图对象。
OH_Drawing_BitmapBuild (OH_Drawing_Bitmap *, const uint32_t width, const uint32_t height, const OH_Drawing_BitmapFormat *) 初始化位图对象的宽度和高度,并且为该位图设置像素格式。
OH_Drawing_CanvasCreate (void) 创建一个画布对象。
OH_Drawing_CanvasBind (OH_Drawing_Canvas *, OH_Drawing_Bitmap *) 将一个位图对象绑定到画布中,使得画布绘制的内容输出到位图中(即CPU渲染)。
OH_Drawing_CanvasAttachBrush (OH_Drawing_Canvas *, const OH_Drawing_Brush *) 设置画刷给画布,画布将会使用设置的画刷样式和颜色去填充绘制的图形形状。
OH_Drawing_CanvasAttachPen (OH_Drawing_Canvas *, const OH_Drawing_Pen *) 设置画笔给画布,画布将会使用设置画笔的样式和颜色去绘制图形形状的轮廓。
OH_Drawing_CanvasDrawPath (OH_Drawing_Canvas *, const OH_Drawing_Path *) 画一个自定义路径。
OH_Drawing_PathCreate (void) 创建一个路径对象。
OH_Drawing_PathMoveTo (OH_Drawing_Path *, float x, float y) 设置自定义路径的起始点位置。
OH_Drawing_PathLineTo (OH_Drawing_Path *, float x, float y) 添加一条到目标点的线段。
OH_Drawing_PathClose (OH_Drawing_Path *) 闭合路径,会添加一条到路径起点位置的线段。
OH_Drawing_PenCreate (void) 创建一个画笔对象。
OH_Drawing_PenSetAntiAlias (OH_Drawing_Pen *, bool) 设置抗锯齿属性,如果为真则说明画笔会启用抗锯齿功能,在绘制图形时会对图形的边缘像素进行半透明的模糊处理。
OH_Drawing_PenSetWidth (OH_Drawing_Pen *, float width) 设置画笔的厚度属性,厚度属性描述了画笔绘制图形轮廓的宽度。
OH_Drawing_BrushCreate (void) 创建一个画刷对象。
OH_Drawing_BrushSetColor (OH_Drawing_Brush *, uint32_t color) 设置画刷的颜色属性,颜色属性描述了画刷填充图形时使用的颜色,用一个32位(ARGB)的变量表示。
OH_Drawing_CreateTypographyStyle (void) 创建一个排版对象,用于定义排版样式。
OH_Drawing_CreateTextStyle (void) 创建一个文本对象,用于定义文本样式。
OH_Drawing_TypographyHandlerAddText (OH_Drawing_TypographyCreate *, const char *) 设置文本内容。
OH_Drawing_TypographyPaint (OH_Drawing_Typography *, OH_Drawing_Canvas *, double, double) 显示文本。

详细的接口说明请参考Drawing

相关权限

不涉及。

依赖

XComponent NativeWindow。

约束与限制

  1. 本示例仅支持标准系统上运行。
  2. 本示例为Stage模型,已适配API version 10版本SDK,SDK版本号(API Version 10 Release),镜像版本号(4.0 Release);
  3. 本示例需要使用DevEco Studio 版本号(4.0 Release)及以上版本才可编译运行。

下载

如需单独下载本工程,执行如下命令:

git init
git config core.sparsecheckout true
echo code/BasicFeature/Native/NdkDrawing/ > .git/info/sparse-checkout
git remote add origin https://gitee.com/openharmony/applications_app_samples.git
git pull origin master
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/openharmony/applications_app_samples.git
git@gitee.com:openharmony/applications_app_samples.git
openharmony
applications_app_samples
applications_app_samples
master

搜索帮助