Delphi Android上的Firemonkey渐变颜色

Delphi Android上的Firemonkey渐变颜色,delphi,firemonkey-fm3,delphi-xe8,Delphi,Firemonkey Fm3,Delphi Xe8,我遇到了一个相当有趣的问题。我有一张表格,它的填充设置为渐变 在Windows、IOS和OSX上,渐变是按原样绘制的。但在Android上,颜色是错误的。有什么想法吗 object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 480 ClientWidth = 640 Fill.Kind = Gradient Fill.Gradient.Points = < item

我遇到了一个相当有趣的问题。我有一张表格,它的
填充设置为
渐变

在Windows、IOS和OSX上,渐变是按原样绘制的。但在Android上,颜色是错误的。有什么想法吗

object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 480
  ClientWidth = 640
  Fill.Kind = Gradient
  Fill.Gradient.Points = <
    item
      Color = xFFFFC600
      Offset = 0.000000000000000000
    end
    item
      Color = xFFFFF100
      Offset = 1.000000000000000000
    end>
  Fill.Gradient.StartPosition.Y = 0.500000000000000000
  Fill.Gradient.StopPosition.X = 1.000000000000000000
  Fill.Gradient.StopPosition.Y = 0.500000000000000000
  FormFactor.Width = 320
  FormFactor.Height = 480
  FormFactor.Devices = [Desktop]
  DesignerMasterStyle = 0
  object Button1: TButton
    Position.X = 8.000000000000000000
    Position.Y = 8.000000000000000000
    TabOrder = 0
    Text = 'Button1'
  end
end
对象格式1:t格式1
左=0
Top=0
标题='Form1'
ClientHeight=480
ClientWidth=640
填充。种类=渐变
Fill.Gradient.Points=<
项目
颜色=xFFFFC600
偏移量=0.000000000000000000000000
结束
项目
颜色=xffff100
偏移量=1.000000000000000000000000
结束>
填充.梯度.起始位置.Y=0.500000000000000000
Fill.Gradient.StopPosition.X=1.000000000000000000
填充.梯度.停止位置.Y=0.500000000000000000
FormFactor.Width=320
FormFactor.Height=480
FormFactor.Devices=[桌面]
DesignerMasterStyle=0
对象按钮1:t按钮
位置X=8.000000000000000000000000
位置Y=8.000000000000000000000000
TabOrder=0
Text='Button1'
结束
结束
窗口:

OSX:

IOS:

安卓:
您使用的是Delphi,对吗?因为,我从未见过在基于Pascal的语言中使用这种语法,也无法让您的代码在Delphi10下运行。它是由代码生成器创建的吗

然而,我已经用Delphi 10西雅图和Firemonkey写下了你想要得到的梯度。 它在每台设备上都能正常工作,外观也一样,即使在Android上:

procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas;
  const ARect: TRectF);
var
  locGradient: TGradient;

begin
  with Canvas do begin
    BeginScene;

    // Create and initialize the gradient object
    locGradient := TGradient.Create;
    with locGradient do begin
      Color   := $FFFFC600;
      Color1  := $FFFFF100;

      StartPosition .Y  := 0.5;

      StopPosition  .X  := 1;
      StopPosition  .Y  := 0.5;
    end;

    // Assign the created gradient object to the fill property of the canvas
    with Fill do begin
      Kind      := TBrushKind.Gradient;
      Gradient  := locGradient;
    end;

    // Create a rectangle which represents the gradient
    FillRect( ARect,  0, 0, AllCorners, 1.0 );

    EndScene;
  end;

  FreeAndNIL( locGradient );
end;

这并不一定能回答您的问题,即为什么只有使用您的代码,您的颜色值才会在Android上出现混乱,但是,您的代码似乎没有遵循常见的Delphi语法约定。

这是我表单的源代码。你不应该写一行代码。。。只要打开你的表格文件,用我提供的东西替换它,啊,我明白了。这很有启发性!我已经让您的代码按照您解释的方式运行,在Delphi10和Delphi XE8下。在我这方面效果很好-颜色在我的Android设备上显示正确。我使用的是运行安卓5.0.2的摩托罗拉G第二代。我的Delphi XE 8 Android SDK配置为使用Android SDK 24.0.2 32位。您使用的是什么Android和Android SDK版本?@Renpai。你真的从来没有看过.dfm代码吗!?你用Delphi编程多久了?