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 gdi+ 文本输出

Delphi 计算l两个日期的时间间隔月数,月数差

Delphi中exit,abort,break,continue,halt,runerro 的区别

Delphi paramstr 获取外部参数

Delphi 提取时间成分

Delphi tooltip提示窗口单元

Delphi 判断是否为二进制文件

Delphi 字符串保存utf-8过程

Delphi 根据经纬度计算地球上两点之间的距离

Delphi获取flash文件的影片时长,原始尺寸,帧数等信息

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



打赏

取消

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

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

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

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

评论

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