HarmonyOS 鸿蒙Next 使用接口display.getDefaultDisplaySync()获取设备宽度高度时drawTextBlob绘制位置不正确,代码如下
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) // *左下角坐标(左下角测试)
我想让水印贴着右上角和左下角,但实际出来效果如下:
更多关于HarmonyOS 鸿蒙Next 使用接口display.getDefaultDisplaySync()获取设备宽度高度时drawTextBlob绘制位置不正确,代码如下的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
看起来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)
在HarmonyOS鸿蒙Next中,使用display.getDefaultDisplaySync()
获取设备宽度高度时,若drawTextBlob
绘制位置不正确,可能的原因和解决方法如下:
-
坐标系差异:确认获取的屏幕宽度高度与绘制使用的坐标系是否一致。HarmonyOS中可能存在不同的坐标系定义,如逻辑坐标系与物理坐标系,确保两者转换正确。
-
分辨率适配:检查是否进行了正确的分辨率适配。不同设备的分辨率不同,直接使用
getDefaultDisplaySync()
获取的值可能需要进行适配处理。 -
绘制区域限制:确认
drawTextBlob
的绘制是否在有效的绘制区域内。如果超出屏幕范围,会导致绘制不可见。 -
Blob参数检查:检查
drawTextBlob
方法的参数,包括字体大小、位置、颜色等,确保这些参数设置正确,不会导致绘制位置偏移。 -
布局问题:如果
drawTextBlob
是在某个布局容器内调用,确认布局容器的尺寸和位置是否影响绘制效果。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html