【问题标题】:How to draw on Canvas (android)如何在画布上绘图 (android)
【发布时间】:2017-08-19 22:30:00
【问题描述】:

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

 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。如果可行,我可以添加一个带有解释的答案。
  • 所以图纸应该做另一门课。我将表格发送到该类 Canvas。然后这个类尝试在这个画布上绘制但不成功
  • 您必须使用您要绘制的画布父级的OnPaint事件。
  • 但在 Windows 上它可以完美运行。为什么我不能在 Android 上这样做?

标签: android delphi canvas firemonkey delphi-xe7


【解决方案1】:
  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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 2012-01-01
    相关资源
    最近更新 更多