Skip to content
On this page

几何图形

Fyne应用程序基于每个窗口1个画布。每个画布都有一个根CanvasObject,它可以是一个小部件,也可以是许多子对象的容器,这些子对象的大小和位置由Layout控制

Position 位置

每个画布的原点位于左上角(0,0),UI的每个元素都可以根据输出设备进行缩放,因此API不描述像素或精确测量。例如,在120DPI显示器上,位置(10,10)可能是从原点向右和向下10个像素,但在HiDPI(或“视网膜”)显示器上,这可能更接近20个像素。

CanvasObject引用的每个位置都是相对于其父对象的。这对于布局算法很重要,但对于Tappable.Taped(PointEvent)处理程序等情况下的开发人员也很重要。这里,X/Y坐标将从按钮的左上角计算,而不是整个画布。这是为了让代码尽可能独立。

Pixel size 像素大小

与其他基于矢量的GUI库一样,Fyne坐标需要基于一些基线监视器分辨率。所有缩放都与此值相关。对于fyne,分辨率为120DPI。这意味着当显示器为120DPI且刻度值均设置为1时,fyne.Size中所指的大小将为1=1px。如上所述,对于HiDPI屏幕,实际DPI可能更接近240,而在移动设备上,它甚至可能是360或更高。为了管理和处理这种复杂性,工具包在内部管理扩展,以便您的应用程序始终保持正确的大小。如果用户将比例设置为较小,那么他们的应用程序将始终具有比正常字体、按钮等小的字体,并且当他们指定较大时,您的应用程序会放大以适应。

与“材料设计”相比,我们可以看到它们的基线DPI为160,尽管数学上相似,但实际数字会有所不同。这意味着Fyne中与设备无关的大小使用较小的数字来表示相同的物理大小。例如,Fyne中18米高的图标在标准材质设计(例如Android)应用程序中的大小为24。这在构建应用程序时并不重要,但在与设计师或材料设计专家合作时可能很重要。

像素大小的一个问题是,是否开始加载位图图像。通常情况下,这些比例是适当的,但如果指定FillMode=fyne.FillOriginal,则由于像素密度,不同设备上的实际图像大小会有所不同。通常,此功能将在Scroll容器中使用。Fyne还定义了一个canvas。Raster原语,它将以输出设备的像素密度精确绘制像素。这使您的代码能够以最高的输出分辨率绘制,而无需了解正在运行的设备的细节。如果出于某种原因需要“像素完美”定位,则需要将CanvasObject.Size()乘以Canvas.Scale()。