Delphi中使用TPathAnimation


本文整理自网络,侵删。

 
FireMonkey具有一个动画组件,该组件会随时间更改属性的值。对于
动画,在“我根据属性值检查了动画的差异”中,从起点到终点的移动是否随属性的值而不同?介绍了

大多数动画组件都在一个方向上更改值,但某些组件具有使用TPathAnimation
之一可以沿一组值更改的便利属性。锯


我做了一个这样的demo

1单击“向下”按钮将栏向下移动50
1单击“下界”按钮以反弹动作将小节向下移动50
当您单击“新建一个”按钮时,该条将从顶部下降并返回到初始状态

设计时有两点

FloatAnimation和PathAnimation都应该是Rectangle的子级,Rectangle是一个条。
将FloatAnimation PropertyName属性设置为Rectangle的Position.Y属性,这将更改值。
可以在对象检查器中设置代码中描述的FloatAnimation属性,但是在此示例中,将它们描述为比较技巧。

unit Unit3;

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, FMX.Layouts, FMX.Controls.Presentation, FMX.Ani;

type
  TForm3 = class(TForm)
    Button1: TButton;
    Layout1: TLayout;
    Layout2: TLayout;
    Button2: TButton;
    Rectangle1: TRectangle;
    Panel1: TPanel;
    FloatAnimation1: TFloatAnimation;
    PathAnimation1: TPathAnimation;
    Button3: TButton;
    FloatAnimation2: TFloatAnimation;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  private
    { private 宣言 }
    mCnt: Integer;
  public
    { public 宣言 }
  end;

var
  Form3: TForm3;

implementation

{$R *.fmx}

procedure TForm3.Button1Click(Sender: TObject);
begin
// 1 Down 
  if mCnt > 4 then Exit;  // 上Down 

  mCnt := mCnt + 1;

  FloatAnimation2.Stop;                              
  FloatAnimation2.Duration := 2;
  FloatAnimation2.StartValue := Rectangle1.Position.Y + 0;  // 始点
  FloatAnimation2.StopValue := Rectangle1.Position.Y + 50;  // ?K点
  FloatAnimation2.Start;                                    // ?_始
end;

procedure TForm3.Button2Click(Sender: TObject);
begin
// New One ボタン?幼?
  FloatAnimation1.Stop;                                   
  FloatAnimation1.Duration := 1;
  FloatAnimation1.StartValue := -250;                      // 始点
  FloatAnimation1.StopValue := 150;                        // ?K点 
  FloatAnimation1.Start;                                   // ?_始
  mCnt := 0;
end;

procedure TForm3.Button3Click(Sender: TObject);
begin
//1 Down Bound 
  if mCnt > 4 then Exit;  

  mCnt := mCnt + 1;

  PathAnimation1.StopAtCurrent;                           // ?K了
  PathAnimation1.Start;                                   // ?_始
end;

procedure TForm3.FormCreate(Sender: TObject);
begin
  mCnt := 0; //初期化
  PathAnimation1.Create(Self);
  PathAnimation1.Path.MoveTo(PointF(0,50));  // 移?臃段е付?
  PathAnimation1.Path.LineTo(PointF(0,10));  // 途中座?酥付?
  PathAnimation1.Path.LineTo(PointF(0,50));  // 途中座?酥付?
  PathAnimation1.Path.LineTo(PointF(0,20));  // 途中座?酥付?
  PathAnimation1.Path.LineTo(PointF(0,50));  // 途中座?酥付?
  PathAnimation1.Path.LineTo(PointF(0,30));  // 途中座?酥付?
  PathAnimation1.Path.ClosePath;             // 座?酥付??K了
  PathAnimation1.Duration := 2;
end;

end.

在FloatAnimation的情况下,该值只能在一个方向上更改,因此,如果要以相同的方式使其反弹,

设置坐标从0到50并开始,停止
设置坐标从50到10并开始,停止
设置坐标从10到50并开始,停止
设置坐标从50到20并开始,停止
设置坐标从20到50并开始,停止
设置坐标从50到30,然后开始,停止
设置坐标从30到50并开始,停止
使用PathAnimation的情况下,您必须编写代码(或使用上述设置准备FloatAnimation并按顺序进行操作),指定要使用MoveTo首先移动的范围,并使用LineTo在该范围内进一步移动。对于
此示例,您可以将坐标指定为

使用MoveTo指定从0到50的移动
如果在此移动过程中有要移动的坐标,请使用LineTo指定多个坐标(即使坐标偏离MoveTo指定的坐标)
指定所有坐标后,使用ClosePath完成坐标的指定。
指定此运动需要持续多长时间
要使用它,只需启动创建的PathAnimation
它可以用来做头动作

相关阅读 >>

Delphi 加载大文件显示进度条

Delphi 获取一个文件夹下的一级目录

Delphi 小票打印开钱箱 自动切纸指令

Delphi防止因系统崩溃而丢失任务栏的图标(重建托盘图标)

Delphi 自带的 base64 编解码函数

Delphi tlistview控件里添加背景色

vclzip控件显示压缩进度

Delphi types of actual and formal var parameters must be identical

Delphi fdconnection1.gettablenames 查看所有表包含用户表和系统表

Delphi edit 让密码变成点

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...