HarmonyOS 鸿蒙Next 使用接口display.getDefaultDisplaySync()获取设备宽度高度时drawTextBlob绘制位置不正确,代码如下

发布于 1周前 作者 caililin 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 使用接口display.getDefaultDisplaySync()获取设备宽度高度时drawTextBlob绘制位置不正确,代码如下

const displayInfo = await display.getDefaultDisplaySync();
this.m_height = displayInfo.height
this.m_width = displayInfo.width;

//省略无关项

canvas.drawTextBlob(textBlob, 0, font.getSize()) // *左下角坐标(左上角测试)
canvas.drawTextBlob(textBlob, this.m_width - textWidth, font.getSize()) // (右上角测试 )
canvas.drawTextBlob(textBlob, 0, this.m_height) // *左下角坐标(左下角测试)

我想让水印贴着右上角和左下角,但实际出来效果如下:

cke_7036.jpeg


更多关于HarmonyOS 鸿蒙Next 使用接口display.getDefaultDisplaySync()获取设备宽度高度时drawTextBlob绘制位置不正确,代码如下的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

7 回复

看起来displayInfo获取的有问题,可以直接计算下组件的尺寸,根据组件宽高去设置绘制文字的坐标。

// NodeContainer组件id设为node
        NodeContainer(this.myNodeController)
          .height('100%')
          .width('100%')
          .id('node')
// 计算NodeContainer组件宽高
let componentUtils:ComponentUtils = this.getUIContext().getComponentUtils();
let modePosition = componentUtils.getRectangleById("node");
this.nodeHeight = modePosition.size.height; // NodeContainer组件的尺寸
this.nodeWidth = modePosition.size.width;
// 绘制
canvas.drawTextBlob(textBlob, 0, font.getSize())
canvas.drawTextBlob(textBlob, this.nodeWidth-textWidth, font.getSize())
canvas.drawTextBlob(textBlob, 0, this.nodeHeight)

getRectangleById获取到的单位为px:https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-arkui-uicontext-0000001774280798#ZH-CN_TOPIC_0000001811316642__getrectanglebyid

更多关于HarmonyOS 鸿蒙Next 使用接口display.getDefaultDisplaySync()获取设备宽度高度时drawTextBlob绘制位置不正确,代码如下的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


解决了老哥,我直接获取了原有照片的ImageInfo,然后拿到宽度和高度渲染的

你打印出来 this.m_width 看看是对的么,如果直接这样看看是什么样子呢

canvas.drawTextBlob(textBlob, this.m_width, font.getSize()) // (右上角测试 )

没用,偏离的太多了。基本上这个 this.m_width只有屏幕的三分之一

深色代码主题
复制
转换为这种也是无效的,反而会将右上角的水印与左上角重合 px2vp(displayInfo.height)
使用的单位全部都是px,没有使用vp

在HarmonyOS鸿蒙Next中,使用display.getDefaultDisplaySync()获取设备宽度高度时,若drawTextBlob绘制位置不正确,可能的原因和解决方法如下:

  1. 坐标系差异:确认获取的屏幕宽度高度与绘制使用的坐标系是否一致。HarmonyOS中可能存在不同的坐标系定义,如逻辑坐标系与物理坐标系,确保两者转换正确。

  2. 分辨率适配:检查是否进行了正确的分辨率适配。不同设备的分辨率不同,直接使用getDefaultDisplaySync()获取的值可能需要进行适配处理。

  3. 绘制区域限制:确认drawTextBlob的绘制是否在有效的绘制区域内。如果超出屏幕范围,会导致绘制不可见。

  4. Blob参数检查:检查drawTextBlob方法的参数,包括字体大小、位置、颜色等,确保这些参数设置正确,不会导致绘制位置偏移。

  5. 布局问题:如果drawTextBlob是在某个布局容器内调用,确认布局容器的尺寸和位置是否影响绘制效果。

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

回到顶部