在 HD 窗体上添加一个 TAniIndicator, 修改其 Enabled 属性为 True, 动画完成了.

这是最简单的动画相关的控件了, 只有两个值得注意的属性:


  1. Enabled: Boolean;          //
  2. Style: TAniIndicatorStyle; //TAniIndicatorStyle = (aiLinear, aiCircular);
  3.  
  4. {例}
  5. AniIndicator1.Style := TAniIndicatorStyle.aiCircular;

它是怎么动起来的? 追源码, 发现它有一个 FAni: TFloatAnimation; 内部变量.
再就追出 TFloatAnimation 的父类 TAnimation; TAnimation 在 FMX.Types 单元, 看来是核心成员了.

TAnimation 的子类们都在 FMX.Ani 单元:


  1. TFloatAnimation      //
  2. TFloatKeyAnimation  //
  3. TColorAnimation      //
  4. TColorKeyAnimation  //
  5. TGradientAnimation  //
  6. TPathAnimation      //
  7. TRectAnimation      //
  8. TBitmapAnimation    //
  9. TBitmapListAnimation //
  10. TFloatKeyAnimation  //
  11. TColorKeyAnimation  //

早在 TFmxObject(FMX 们的祖先)就有了一些动画相关的方法:


  1. StartAnimation();            //
  2. StopAnimation();            //
  3. StartTriggerAnimation();    //
  4. StartTriggerAnimationWait(); //
  5. StopTriggerAnimation();      //
  6. AnimateFloat();              //
  7. AnimateColor();              //
  8. AnimateFloatDelay();        //
  9. AnimateFloatWait();          //
  10. StopPropertyAnimation();    //

另在 FMX.Types 单元还有一些动画插入算法的一些公用函数(应该主要是内部使用):


  1. InterpolateSingle();  //
  2. InterpolateRotation(); //
  3. InterpolateColor();    //
  4. InterpolateLinear();  //
  5. InterpolateSine();    //
  6. InterpolateQuint();    //
  7. InterpolateQuart();    //
  8. InterpolateQuad();    //
  9. InterpolateExpo();    //
  10. InterpolateElastic();  //
  11. InterpolateCubic();    //
  12. InterpolateCirc();    //
  13. InterpolateBounce();  //
  14. InterpolateBack();    //

很多动画应该在设计时就可以方便完成, 在选择某些属性值时可直接添加动画, 如:


  1. //Bitmap 属性:
  2. Create New TBitmapAnimation
  3. Create New TBitmapListAnimation
  4.  
  5. //Color 属性:
  6. Create New TColorAnimation
  7. Create New TColorKeyAnimation
  8.  
  9. //Gradient 属性:
  10. Create New TGradientAnimation
  11.  
  12. //Width、Height、X、Y、StrokeThickness、XRadius、YRadius、Opacity、RotationAngle 等属性:
  13. Create New TFloatAnimation
  14. Create New TFloatKeyAnimation

先尝试一个让控件转起来的动画吧:

添加一个 TRectangle, 从其 RotationAngle 属性 Create New TFloatAnimation (需要删除时, 选定后按 Delete),

然后调整自动建立的 FloatAnimation1 的属性值:


  1. //一般在设计时取值即可, 下面是运行时的代码:
  2. procedure TForm1.FormCreate(Sender: TObject);
  3. begin
  4.   FloatAnimation1.Enabled := True;
  5.   FloatAnimation1.Loop := True;
  6.   FloatAnimation1.Duration := 2.5;  //一个动画周期的长度(秒)
  7.   FloatAnimation1.StartValue := ;  //起点角度
  8.   FloatAnimation1.StopValue := ; //终点角度
  9. end;

在设计时制作上面动画的另一方法:

1、添加 TRectangle(Rectangle1);
2、选定 Rectangle1 后添加 TFloatAnimation(FloatAnimation1);
3、修改 FloatAnimation1 的属性 PropertyName 值为 RotationAngle;
4、如上设置 FloatAnimation1 的其它属性.


完全在运行时实现上面动画的代码:


  1. uses FMX.Objects, FMX.Ani; //添加, 但不要重复添加
  2.  
  3. var
  4.   rect: TRectangle;
  5.  
  6. procedure TForm1.FormCreate(Sender: TObject);
  7. begin
  8.   rect := TRectangle.Create(Self);
  9.   rect.Parent := Self;
  10.   rect.Align := TAlignLayout.alCenter;
  11.  
  12.   with TFloatAnimation.Create(Self) do
  13.   begin
  14.     Parent := rect;
  15.     PropertyName := 'RotationAngle';
  16.     Enabled := True;
  17.     Loop := True;
  18.     Duration := 2.5;
  19.     StartValue := ;
  20.     StopValue := ;
  21.   end;
  22. end;

Delphi XE2 之 FireMonkey 入门(12) - 动画(上)的更多相关文章

  1. Delphi XE2 之 FireMonkey 入门(13) - 动画(下)

    TAnimation 类的主要成员: protected   function NormalizedTime: Single;      //   procedure ProcessAnimation ...

  2. Delphi XE2 之 FireMonkey 入门(35) - 控件基础: TFmxObject: 其它

    Delphi XE2 之 FireMonkey 入门(35) - 控件基础: TFmxObject: 其它 TFmxObject 增加了 TagObject.TagFloat.TagString, 算 ...

  3. Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题

    Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题 很喜欢 FMX 的一些新控件, 如: TExpander.TArcDial.TComboTrackBar.T ...

  4. Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView、TTreeViewItem

    Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView.TTreeViewItem TScrollBox -> TCustomTreeView -> ...

  5. Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox、TVertScrollBox、TFramedScrollBox、TFramedVertScrollBox

    Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox.TVertScrollBox.TFramedScrollBox.TFramedVertScrollB ...

  6. Delphi XE2 之 FireMonkey 入门(38) - 控件基础: TPopupMenu、TMenuItem、TMenuBar、TMainMenu

    Delphi XE2 之 FireMonkey 入门(38) - 控件基础: TPopupMenu.TMenuItem.TMenuBar.TMainMenu 相关控件: TMenuBar.TPopup ...

  7. Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览

    Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览 { TControl } public   constructor Create(...); ov ...

  8. Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm

    Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm 当我第一次读取 Form1.StyleLookup 并期待出现 "formstyle" 时 ...

  9. Delphi XE2 之 FireMonkey 入门(31) - 数据绑定: 绑定数据库

    Delphi XE2 之 FireMonkey 入门(31) - 数据绑定: 绑定数据库 一.全设计时操作: 先在窗体上放置控件: DataSource1    : TDataSource; Clie ...

随机推荐

  1. spark(3)

    0.spark -------------------------------------------- transformation map filter repartition spark核心AP ...

  2. 安装RF

    pip install robotframework wxPython pip install robotframework-ride pip install --pre --upgrade robo ...

  3. linux MySql 在 Master 主从复制配置

    在 Master 服务器上建立用于 Slave 服务器复制数据的帐户 [root@master ~]# mysql mysql> grant replication slave,replicat ...

  4. 几个有关FPGA的概念

    <数字设计——原理和实践>(John F.Wakerly)的书 FPGA同步时钟设计 简单说就是 一个系统中(或系统中的一部分)都采用同一个时钟触发.系统中的(D)触发器全部都连接到一个时 ...

  5. Codeforces Round #427 (Div. 2) - B

    题目链接:http://codeforces.com/contest/835/problem/B 题意:给定一个数k和一个数字串n.问你最少改几个数字才能满足所有数字的和不小于k. 思路:考虑贪心,每 ...

  6. evpp::buffer使用

    evpp::Buffer testmsg; const char* buf123 = "12342333333333333333333333333323424324234234"; ...

  7. 什么是LMDB闪电记忆映射数据库

    LightningMemory-MappedDatabase(LMDB)是一个软件库,它以键值存储的形式提供高性能的嵌入式事务数据库.LMDB是用C语言编写的,具有多种编程语言的API绑定.LMDB将 ...

  8. Angular前端开源框架

    1.  项目框架介绍 本项目采用了开源项目ngx-admin作为脚手架.基于Angular 8 +,Bootstrap 4+和Nebular,ngx-admin是最受欢迎的后台管理模板,是用于个人和商 ...

  9. 利用BeautifulSoup爬去我爱我家的租房数据

    因为之前对BeautifulSoup一直不是很熟悉,刚好身边的朋友同事在找房子,就想着能不能自己写个爬虫爬一下数据,因此就写了这个爬虫.基本都是边看书边写的,不过也没什么好讲的.直接粘代码了. # c ...

  10. Comet OJ - Contest #6 D. 另一道树题 并查集 + 思维 + 计数

    Code: #include <cstdio> #include <algorithm> #include <cstring> #include <vecto ...