FMX.Graphics.TCanvas.DrawEllipse не работает на Android - PullRequest
1 голос
/ 23 марта 2019

Я делаю простое приложение для рисования с FireMonkey и Delphi. Все, что он на самом деле делает, это рисование линий и эллипсов. Это код:

Image1.Bitmap.Canvas.BeginScene;
with Form1 do begin
for i := 0 to 360 do
  if (i mod 15)=0 then
  begin
    p1 := TPointF.Create(PX, PY);
    p2 := TPointF.Create(Round(PX+200*sin(i*pi/180)), Round(PY+200*cos(i*pi/180)));
    Image1.Bitmap.Canvas.DrawLine(p1, p2, 100);
  end;

for i := 0 to 200 do
  if (i mod 20)=0 then
  begin
    prst1 := TRectF.Create(PX+i,PY+i,PX-i,PY-i);
    Image1.Bitmap.Canvas.DrawEllipse(prst1, 100);
  end;
 Image1.Bitmap.Canvas.EndScene;
  end;

Этот код отлично работает, когда я компилирую его под Win32 или Win64. Но когда я пытаюсь скомпилировать его и запустить на устройстве Android, отображаются только строки, а эллипсы просто отсутствуют. У кого-нибудь есть идея, почему это происходит?

Заранее благодарю за помощь!

1 Ответ

1 голос
/ 23 марта 2019

Вы можете нарисовать Form.Canvas в обработчике событий OnPaint. Вот пример:

procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas;
  const ARect: TRectF);
begin
  with Canvas do begin
    BeginUpdate;
    try
      Stroke.Kind := TBrushKind.Solid;
      Stroke.Thickness := 2.0;
      DrawEllipse(ARect,1);
      DrawLine(PointF(ARect.Left,ARect.Height / 2), PointF(ARect.right,ARect.Height / 2), 1);
      DrawLine(PointF(ARect.Left+(ARect.Width / 2),ARect.Height), PointF(ARect.Left+(ARect.Width / 2),0), 1);
    finally
      EndUpdate;
    end;
  end;
end;
...