繁体   English   中英

FireMonkey:Android 上缺少抗锯齿和抖动效果

[英]FireMonkey: Missing Anti-Aliasing and jiggling effect on Android

我在 Delphi 10.4 (FMX) 中创建了一个带有 TArc 的进度 animation,但是在 Android 上运行应用程序时存在一些奇怪的渲染行为。

  1. TArc 或 TLine 之类的简单形状似乎都没有抗锯齿功能。 TForm.Quality设置为HighQuality似乎没有任何效果。

  2. 设置Arc1.Stroke.Cap:= TStrokeCap.Round; 似乎对 Android 没有影响。 两端根本不圆。 *

  3. TFloatAnimation 似乎存在某种抖动问题,但我无法找出原因。*

在 Android 和 Windows 上预览

*在 Windows (10) 上运行应用程序时,一切看起来和运行良好,但在 Android 上存在这些故障,我想知道问题出在哪里。 尤其是缺少抗锯齿功能。 智能手机上的显示器是高密度的,但缺失的抗锯齿功能仍然非常清晰可见。 这是从 Android 设备和运行 Windows 10 的台式 PC 捕获的视频:

https://youtu.be/MyNva5ymSWU

这是一个示例代码:

Unit1.fmx

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 344
  ClientWidth = 427
  Fill.Color = claLightskyblue
  Fill.Kind = Solid
  FormFactor.Width = 320
  FormFactor.Height = 480
  FormFactor.Devices = [Desktop]
  DesignerMasterStyle = 0
  object Arc1: TArc
    Align = Center
    Size.Width = 60.000000000000000000
    Size.Height = 60.000000000000000000
    Size.PlatformDefault = False
    Stroke.Color = claWhite
    Stroke.Thickness = 5.000000000000000000
    Stroke.Cap = Round
    EndAngle = 90.000000000000000000
    object FloatAnimationStartAngle: TFloatAnimation
      Enabled = True
      Duration = 2.000000000000000000
      Loop = True
      PropertyName = 'StartAngle'
      StartValue = 0.000000000000000000
      StopValue = 360.000000000000000000
    end
    object FloatAnimationEndAngle: TFloatAnimation
      Enabled = True
      Duration = 2.000000000000000000
      OnFinish = FloatAnimationEndAngleFinish
      PropertyName = 'EndAngle'
      StartValue = 1.000000000000000000
      StopValue = 360.000000000000000000
    end
  end
end

单元1.pas

// ...stripped code here at top...
implementation

var
  increasing: Boolean = True;

{$R *.fmx}

procedure TForm1.FloatAnimationEndAngleFinish(Sender: TObject);
begin
  FloatAnimationEndAngle.Enabled := false;
  FloatAnimationEndAngle.Inverse := not FloatAnimationEndAngle.Inverse;

  if increasing then
    FloatAnimationEndAngle.Duration := FloatAnimationEndAngle.Duration * 2.0
  else
    FloatAnimationEndAngle.Duration := FloatAnimationEndAngle.Duration / 2.0;

  increasing := not increasing;
  FloatAnimationEndAngle.Enabled := true;
  FloatAnimationEndAngle.Start();
end;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM