Delphi FMX.Graphics.TCanvas.drawerlipse不';我不能在安卓上工作

Delphi FMX.Graphics.TCanvas.drawerlipse不';我不能在安卓上工作,delphi,firemonkey,rad-studio,Delphi,Firemonkey,Rad Studio,我正在用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

我正在用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下编译它时,这段代码可以完美地工作。但当我试图编译它并在安卓设备上运行时,只会出现行,省略号就不见了。有人知道为什么会这样吗


提前感谢您的帮助

您可以在
OnPaint
事件处理程序中的
Form.Canvas
上绘制。以下是一个例子:

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;

在图像控件中绘制并不是在屏幕上绘制的正确方式。尝试从表单的
OnPaint
事件处理程序中直接在表单画布上绘图。请始终提供变量初始化和类型等详细信息。例如,
PX
PY
在输入时有什么值?如果他们碰巧是123456怎么办?代码的上下文是什么?事件处理程序?您定义的方法?什么是
笔刷
笔划
属性值?额外问题:一条完全不透明的线的不透明度值是多少?@TomBrunberg对此表示抱歉。
PX
PY
都是200,而
TImage
是400x400,因此它们实际上只是代表
TImage
的中心。代码在
按钮下单击
过程-我只想在图像上绘制雷达似的表面。然后我在上面画轨迹。我只有
stroke
color
属性值,对于
stroke
TAlphaColors,它们是
3
,对于
color
,它们是黑色的。
TImage
对象检查器中的不透明度值为
1
(如果这是您要问的问题)。我只是不明白为什么相同的FireMonkey代码在Win32下工作,但在Android下不工作。我是Delphi的新手,我相信相同的代码在这两种情况下都能工作。就我有限的知识而言,Embarcadero wiki对我并没有多大帮助。当我想在TPaintBox上绘制多个轨迹时,使用TPaintBox会比TImage更好吗(因此在循环中编辑它,可以工作大约1000步)?感谢您回复我的评论,但请将这些信息添加到您的问题中,在评论中,它很容易被忽略。我关于不透明度的问题源于您的行:
Image1.Bitmap.Canvas.DrawLine(p1,p2,100)。第三个参数是不透明度,0..1.0 acc docs,但是好的,任何高于1.0的都被认为是1.0。