如何在画布上绘制(android)

如何在画布上绘制(android),android,delphi,canvas,firemonkey,delphi-xe7,Android,Delphi,Canvas,Firemonkey,Delphi Xe7,我想用另一种方法在画布上画些东西。但我不能 unit MainFormUnit; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, FMX.Objects, System.Math.Vec

我想用另一种方法在画布上画些东西。但我不能

 unit MainFormUnit;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes,
  System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics,
  FMX.Dialogs, FMX.StdCtrls, FMX.Objects, System.Math.Vectors;

type
  TMainForm = class(TForm)
    Label1: TLabel;
    Button1: TButton;
    Timer1: TTimer;
    procedure Timer1Timer(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

{$R *.fmx}

procedure TMainForm.Timer1Timer(Sender: TObject);
begin
  Canvas.BeginScene;
  Canvas.Fill.Color := $FF111111 + random($FFFFFF);
  Canvas.Fill.Kind := TBrushKind.Solid;
  Canvas.FillRect(RectF(random(300), random(300), random(300), random(300)), 0,
    0, [], 1);
  Canvas.EndScene;
end;

end.

它没有画任何东西。为什么?请不要在OnPaint方法中使用绘图操作。

在windows上,它可以完美工作。我无法测试自己,因此我只需说明:将绘图代码更改为窗体
OnPaint
事件。然后将
OnTimer
事件更改为仅调用
Invalidate
。如果这是可行的,我可以添加一个答案和解释。所以图纸应该做另一个类。我把表格的画布发给那个班。然后,该类尝试在此画布上绘制,但未成功。您必须使用要绘制的画布父级的
OnPaint
事件。但在windows上,它可以完美地工作。为什么我不能在安多德身上这么做?
  if Canvas.BeginScene the
  begin
    Canvas.Fill.Color := $FF111111 + random($FFFFFF);
    Canvas.Fill.Kind := TBrushKind.Solid;
    Canvas.FillRect(RectF(random(300), random(300), random(300), random(300)), 
    0,
    0, [], 1);
    Canvas.EndScene;
  end;