Цвет градиента огненной обезьяны на Android

Я столкнулся с довольно забавной проблемой. У меня есть форма с его Fill установлен в Gradient,

В 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

Окна:Скриншот Windows

OSX:Скриншот OSX

IOS:Скриншот IOS

Android:Скриншот Android

1 ответ

Вы используете Delphi, верно? Потому что я никогда не видел этот синтаксис, используемый в языке, основанном на Pascal, и не смог заставить ваш код работать под Delphi 10 Seattle. Был ли он создан генератором кода?

Однако я написал градиент, который вы пытались получить с помощью Delphi 10 Seattle и 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.

Другие вопросы по тегам