我尝试在Android应用程序中显示1像素细线,但FMX框架的行为很奇怪:线条经常会有一点模糊,在屏幕上可以看到。即使在高分辨率屏幕上(在Ascend Mate 7上测试,它具有16英寸显示器上的FullHD 1080x1920),也是明显的。无论我是否使用组件,例如TLine或TRectangle(没有边 - 只有Height = 1),还是在画布上自己画一条线(例如使用
很奇怪的是,当滚动包含这些线的视图(在运行时)时,线条的粗细似乎会改变。将线条粗细设置为小于值
这是上面截图的示例项目:https://www.dropbox.com/s/le70jf601axd1xf/example.zip?dl=1 我测试了版本10.1(Berlin),但这种奇怪的行为也发生在以前的版本中(只要我记得)。
Canvas.Stroke.Thickness:= 1.0
和Canvas.DrawLine()
),编译为Windows应用程序可以正确显示1px线条,但在Android上,线条被绘制为2px或有时为3px。有时候是介于两者之间的东西,比如一个实线和第二个半透明线。很奇怪的是,当滚动包含这些线的视图(在运行时)时,线条的粗细似乎会改变。将线条粗细设置为小于值
1.0
可以真正绘制出1像素的线条,但是线条本身会变为透明。无论我尝试什么方法,都无法创建一个完全不透明的黑色实心1像素细线。而且上述问题(例如滚动时)仍然存在。更改TForm.Quality
也没有帮助。本机Android应用程序似乎没有绘制细线的问题。
这里是本机截图(放大测量线条粗细):
我尝试了一些建议,比如“移动”这些行:http://sourceoddity.com/blog/2013/10/using-tcanvas-in-delphi-for-android/。这有助于消除模糊,但这些线仍然被画成超过1像素,而我希望在一个地方解决这个问题(我无法重写/重新绘制框架中的所有数百个组件)。这是上面截图的示例项目:https://www.dropbox.com/s/le70jf601axd1xf/example.zip?dl=1 我测试了版本10.1(Berlin),但这种奇怪的行为也发生在以前的版本中(只要我记得)。
TPlatformServices.Current.GetPlatformService(IFMXWindowService) as IFMXWindowService
的GetWindowScale()
给出以下值:2.5(小)、2.75(中)、3(大)。我可能错了,但我认为这可能是问题所在... - StanE