在 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. dsu on tree 与长链剖分

    dsu on tree 对于树进行轻重链剖分,对于节点 $x$ ,递归所有轻儿子后消除其影响,递归重儿子,不消除其影响. 然后对于所有轻儿子的子树暴力,从而得到 $x$ 的答案. 对于要消除暴力消除即 ...

  2. 使用filebeat收集不同用应用的日志传输到redis,并加以区分

    附加技巧 步骤流程: 使用filebeat收集一台主机上两个不同应用的日志,传递给redis,然后logstash从redis中拉去数据传递给elasticsearch 1.filebeat.yml文 ...

  3. django中配置MySql

    1.配置字段 在setting文件中配置数据库字段:数据库需要提前手动创建好:语句(create database testdb charset "utf8";) DATABASE ...

  4. makeinfo - 翻译 Texinfo 文档

    SYNOPSIS 总览 makeinfo [OPTION]... TEXINFO-FILE... DESCRIPTION 描述 将 Texinfo 源文档翻译为各种其他格式,默认是可以用 Emacs ...

  5. MIT-线性代数公开课

    本博客是学习MIT-线性代数笔记,Gilbert Strang大神讲的通俗易懂,感兴趣的可以观看视频 其中习题集请点击 01)方程组的几何解释 02)矩阵消元 03)乘法和逆矩阵 04)A的LU分解 ...

  6. vi文本编辑器的使用

    1.1.模式 编辑模式 输入模式 末行模式 1.2.常用命令 vi file 直接打开,不能修改,光标在行首 vi +n file 直接打开,不能修改,光标在第n行 vi + file 直接打开,不能 ...

  7. GUI学习之二十五——QFontDialog学习总结

    今天学习字体对话框——QFontDialog()控件. QFontDialog()是继承自QDialog()的一个子类,用来选择给定的字体(包括字体.字号.样式等) 一.构造函数 QFontDialo ...

  8. 扩展微信小程序 Page 构造函数,修改生命周期函数

    不BB,直接正题 一. 将公共方法绑定到Page上 单个绑定 const oldPage = Page Page = function(app) { // 注意公共函数的名字不要重复,否则覆盖 app ...

  9. vue组件样式scoped

    1.vue组件中的样式如果没加scrped,样式代表的是全局样式(避免组件之间样式的冲突).加了属性代表是模块化的. 其他组件引用button组件 上面分析了单个组件渲染后的结果,那么组件互相调用之后 ...

  10. BZOJ 3887: [Usaco2015 Jan]Grass Cownoisseur tarjan + spfa

    Code: #include <bits/stdc++.h> #define setIO(s) freopen(s".in","r",stdin) ...