本文整理自网络,侵删。
FireMonkey具有一个动画组件,该组件会随时间更改属性的值。对于动画,在“我根据属性值检查了动画的差异”中,从起点到终点的移动是否随属性的值而不同?介绍了
大多数动画组件都在一个方向上更改值,但某些组件具有使用TPathAnimation之一可以沿一组值更改的便利属性。锯
我做了一个这样的demo
1单击“向下”按钮将栏向下移动501单击“下界”按钮以反弹动作将小节向下移动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中exit,abort,break,continue,halt,runerro 的区别
Delphi获取flash文件的影片时长,原始尺寸,帧数等信息
更多相关阅读请进入《Delphi》频道 >>