单位转换问题希望在不同HarmonyOS 鸿蒙Next手机下都能显示1mm

单位转换问题希望在不同HarmonyOS 鸿蒙Next手机下都能显示1mm 如题,比如现在有个显示纸尺的功能,我需要在手机上显示准确的毫米值,没有查到相关的换算公式,1mm转换为vp或px应该如何转换?

3 回复

伙伴您好,上面的方案获取的dpi是全屏幕的,这边更新以下,以屏幕宽度方向(Y轴)的dpi计算,数据准确,参考如下代码

let displayClass: display.Display | null = null;
displayClass = display.getDefaultDisplaySync();
let height = displayClass.height //像素px
let dpi = displayClass.yDPI
console.info('屏幕Y方向对应的DPI: ' + dpi);
console.info('屏幕宽度的物理长度(mm): ' + height/dpi*25.4);
console.info('屏幕宽度一毫米有多少px: ' + dpi/25.4);

打印

03-02 15:56:21.876   24344-24344 A03d00/JSAPP pid-24344 I     屏幕Y方向对应的DPI: 442.8710021972656
03-02 15:56:21.876   24344-24344 A03d00/JSAPP pid-24344 I     屏幕宽度的物理长度(mm): 156.00027921725726
03-02 15:56:21.876   24344-24344 A03d00/JSAPP pid-24344 I     屏幕宽度一毫米有多少px: 17.435866228238805

更多关于单位转换问题希望在不同HarmonyOS 鸿蒙Next手机下都能显示1mm的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


伙伴您好,关于换算的问题,需要了解两个知识点 DPI(每英寸点数):每英寸有多少像素 一英寸=25.4毫米 所以一毫米有(DPI/25.4)个px

DPI获取方法如下

let displayClass: Array<display.Display> = [];
display.getAllDisplays((err: BusinessError, data: Array<display.Display>) => {
  displayClass = data;
  const errCode: number = err.code;
  if (errCode) {
    console.error('Failed to obtain all the display objects. Code: ' + JSON.stringify(err));
    return;
  }
  console.info('Succeeded in obtaining all the display objects. Data: ' + JSON.stringify(data));
  console.info('Succeeded in obtaining all the display objects. densityDPI: ' + JSON.stringify(displayClass[0].densityDPI));

});

在HarmonyOS鸿蒙Next中,确保单位转换在不同设备下都能显示1mm,可以通过使用系统提供的统一单位转换机制来实现。HarmonyOS提供了DisplayMetrics类来获取设备的屏幕密度,结合TypedValue类进行单位转换,确保在不同设备上显示一致。

代码示例如下:

import display from '@ohos.display';
import util from '@ohos.util';

let displayMetrics = new display.DisplayMetrics();
display.getDefaultDisplaySync(displayMetrics);

// 将1mm转换为像素
let mmInPixels = util.TypedValue.applyDimension(util.TypedValue.COMPLEX_UNIT_MM, 1, displayMetrics);

通过这种方式,可以在不同设备上确保1mm的显示一致性。TypedValue.applyDimension方法会根据设备的屏幕密度自动进行单位转换,确保在不同设备上显示相同的物理尺寸。

如果需要在不同设备上进行测试,可以通过模拟器或真机调试,确保代码在不同屏幕密度的设备上都能正确显示1mm。

回到顶部