【问题标题】:Codename One: how to get the width in millimeters of a component?代号一:如何获取组件的宽度(以毫米为单位)?
【发布时间】:2017-08-05 13:39:38
【问题描述】:

我创建了一个应用来计算多图像的大小,以便在 Codename One 设计器中使用它们。

正如您在下面的屏幕截图中看到的,我的应用程序有一个滑块,我得到了它的宽度(以毫米为单位)。问题是所选宽度的值不正确。我在两台 Android 设备上测试了该应用,测得的长度与该应用报告的长度不同。

你可以看到full source code,但是相关代码如下:

Label value = new Label("Move the cursor on the slider...");

Style thumbStyle = new Style();
thumbStyle.setFont(Font.createSystemFont(Font.FACE_MONOSPACE, Font.STYLE_BOLD, Font.SIZE_LARGE), true);

Slider slider = new Slider();
slider.setMaxValue(1000);
slider.setMinValue(0);
slider.setProgress(20); // Set  the starting value
slider.setThumbImage(FontImage.create("|", thumbStyle));
slider.setEditable(true); // to it works as a slider instead of a progress bar
slider.addActionListener(e -> {
    Integer valueSelected = slider.getProgress();
    Integer sliderWidth = slider.getWidth();
    Double inch = sliderWidth.doubleValue() / (slider.getMaxValue() - slider.getMinValue()) * valueSelected / 100.0;
    Integer millimeters = Double.valueOf(inch * 25.4).intValue();
    value.setText("Value selected: " + millimeters.toString() + " mm");
});

非常感谢您的帮助

【问题讨论】:

    标签: codenameone


    【解决方案1】:

    毫米测量值不准确。设备可以为 convert 方法返回不同的值或比率,而不是它为密度标志返回的值。

    不幸的是,Google 用于证明设备“良好”的测试套件实际上并未涵盖这些内容。我们对此无能为力。

    【讨论】:

    • 所以“整数sliderWidth = slider.getWidth();” (如上面的代码)是不准确的(在我看来也没有很好的记录,因为 API 没有报告返回值中使用了哪个错误单位)。我不知道“Display.getInstance().getDeviceDensity()”是否更准确:生成所需尺寸的多图像的最佳方法是什么?
    • getWidth 100% 准确,因为它适用于像素。密度有点像抛硬币。我们使用 getDeviceDensity 来选择正确的图像尺寸。我们在设计器工具代码中有一些硬编码的最佳实践,可以导入多张图片,您可以通过设计器工具的 github 代码查看
    • 密度和DPI是一回事吗?我上面的代码是错误的,因为我假设 getWidth() 返回的是英寸的倍数而不是像素: /* Double inch = sliderWidth.doubleValue() / (slider.getMaxValue() - slider.getMinValue()) * valueSelected / 100.0 ; */ 我试图修复它:sliderActionListener.java 我试图实现 MultiImageCalculator.getDeviceDPI() 所以:getDeviceDPI.java 这个方法正确吗?
    • 我们始终使用像素,并且在所有情况下都是 100% 准确的。这可能对您有用,要获得正确的数字需要反复试验
    猜你喜欢
    • 2016-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 2016-05-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多