TAnimation 类的主要成员:


protectedfunction NormalizedTime: Single;      //procedure ProcessAnimation; virtual;  //其子类们主要通过覆盖此方法来实现不同的动画procedure Loaded; override;           //
publicprocedure Start; virtual;             //播放procedure Stop; virtual;              //停止procedure StopAtCurrent; virtual;     //停止在当前帧; 和 Pause 属性不同的是它会触动 OnFinish 事件procedure StartTrigger(...); virtual; //如果不是覆盖, 一般应使用 Trigger、TriggerInverse 属性而不是该方法procedure ProcessTick(...);           //内部使用的动画执行方法, 主要由它来调用 ProcessAnimation 过程.property Running: Boolean ...;        //是否运行中; 只读property Pause: Boolean ...;          //暂停
publishedproperty AnimationType: TAnimationType ...;     //动画类型; 它好像只影响到插入(Interpolation)算法property AutoReverse: Boolean ...;              //自动逆向(起点->终点->起点)property Enabled: Boolean ...;                  //是否可用property Delay: Single ...;                     //延迟多少秒再开始动画property Duration: Single ...;                  //动画长度(秒); 其子类一般会默认为 0.2property Interpolation: TInterpolationType ...; //动画插入类型; 通过此选项可实现像反弹等多种动画效果(很好玩)property Inverse: Boolean ...;                  //逆向动画(终点->起点)property Loop: Boolean ...;                     //循环播放property Trigger: TTrigger ...;                 //指定可触发动画的事件; 其值是个字符串(见下表)property TriggerInverse: TTrigger ...;          //指定可触发逆向动画的事件; 其值是个字符串(见下表)property OnProcess: TNotifyEvent ...;           //每个动画帧触发的事件property OnFinish: TNotifyEvent ...;            //停止时触发的事件
end;{ Trigger、TriggerInverse 属性的可选值: }
'IsMouseOver=true'
'IsMouseOver=false'
'IsFocused=true'
'IsFocused=false'
'IsVisible=true'
'IsVisible=false'
'IsDragOver=true'
'IsDragOver=false'
'IsOpen=true'
'IsOpen=false'

TFloatAnimation 用于尺寸变化的动画; TColorAnimation 用于颜色变化的动画; TGradientAnimation 用于颜色梯度动画; TRectAnimation 用于边界(Padding、Margins)动画; 它们的扩展属性是一样的(但参数类型不一样):


StartValue       //起点值
StopValue        //终点值
StartFromCurrent //是否从当前帧开始动画
PropertyName     //动画要控制的属性; 其值是个字符串(见下表){ PropertyName 常用取值: }
'Width'
'Heigth'
'StrokeThickness'
'Position.X'
'Position.Y'
'Scale.X'
'Scale.Y'
'RotationCenter.X'
'RotationCenter.Y'
'RotationAngle'
'Opacity'
'Margins.Left'
'Margins.Top'
'Margins.Rigth'
'Margins.Bottom'
'Padding.Left'
'Padding.Top'
'Padding.Rigth'
'Padding.Bottom''Fill.Color'
'Stroke.Color''Fill.Gradient'
'Stroke.Gradient''Margins'
'Padding'

TFloatKeyAnimationTColorKeyAnimation 可通过其 Keys 属性定义多个关键帧(前面几种都只有两个关键帧), 其属性扩展:


Keys             //TKeys 类型的集合, 元素类型是 TKey; 主要使用 TKey.ID(关键帧序号)、TKey.Key(参数值) 两个属性
PropertyName     //
StartFromCurrent //

TBitmapAnimation 用于两张图片的切换动画; 它的扩展属性有:


StartValue   //起点图片
StopValue    //终点图片
PropertyName //只能是 'Bitmap'

TBitmapListAnimation 只需要一张图片, 根据需要的动画帧数(AnimationCount)把图片均分, 然后让切分后的各部分连成动画; 它的扩展属性有:


AnimationCount  //动画帧数
AnimationBitmap //图片
PropertyName    //

TPathAnimation 可以让对象绕一个指定的路径运动; 它的扩展属性有:


Path: TPathData; //路径数据; 一般通过 TPathData.Data 读写数据, 数据(字符串)使用了 SVG 中 Path 的格式标准
Rotate: Boolean; //是否旋转(自转)

路径动画简单示例: 先在 HD 窗体上放置一个 TRectangle, 选定后给它添加一个 TPathAnimation; 测试代码:


conststrPath = 'M 3.84500002861023,3.47300004959106 ' +'C 4.83799982070923,24.6110000610352 26.2040004730225,34.9749984741211 42.875,30.8320007324219 ' +'C 69.8730010986328,24.121000289917 82.1620025634766,-9.76099967956543 74.6009979248047,-37.4169998168945 ' +'C 63.992000579834,-76.2160034179688 23.7210006713867,-93.3140029907227 -9.33600044250488,-80.4909973144531 ' +'C -52.2709999084473,-63.8380012512207 -70.8339996337891,-8.08600044250488 -55.2200012207031,37.6059989929199 ' +'C -35.9000015258789,94.1429977416992 24.3759994506836,118.28099822998 73.6240005493164,96.3960037231445 ' +'C 132.567993164063,70.2020034790039 157.505996704102,-7.92000007629395 133.664993286133,-71.5500030517578 ' +'C 105.81600189209,-145.880996704102 25.3040008544922,-177.113998413086 -40.0859985351563,-146.054992675781 ' +'C -95.6880035400391,-119.646003723145 -129.975997924805,-55.0750007629395 -127.064002990723,11.4790000915527';procedure TForm1.FormCreate(Sender: TObject);
beginPathAnimation1.Path.Data := strPath;PathAnimation1.Duration := 8;PathAnimation1.AutoReverse := True;PathAnimation1.Loop := True;PathAnimation1.Rotate := True;PathAnimation1.Enabled := True;
end;{ 如果要把路径显示出来, 还需要使用 TPath, 它是专用于呈现路径数据的. }

另外: 动画应该可以叠加和嵌套的, 暂不再深究.
还有, 真的在实用时, 使用这些类恐怕不如直接使用 FMXObject 中的方法来得便宜, 如:


procedure TForm1.Button1Click(Sender: TObject);
beginButton1.AnimateFloat('Position.X', Button1.Position.X*2, 1.5);
end;

转载于:https://www.cnblogs.com/khzide/articles/4493054.html

Delphi XE2 之 FireMonkey 入门(13) - 动画(下)相关推荐

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

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

  2. Delphi XE2 之 FireMonkey 入门(1)

    Delphi XE2 的 FireMonkey 是跨平台的, 暂时只准备看看它在 Windows 下(我是 32 位 Win7)的应用情况. 很新的东西, 相信有了它, 以后的界面将会更灵活.漂亮, ...

  3. Delphi XE2 之 FireMonkey 入门(20) - TStyleBook(皮肤、样式相关)

    我觉得叫 "皮肤" 不如叫 "样式" 或 "风格", 因为它可以包含和动作关联的动画. 在 FMX 下, 控件可以任意绘制, 各部件个性化的 ...

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

    { TControl } publicconstructor Create(...); override; //destructor Destroy; override; //procedure Ad ...

  5. Delphi XE2 之 FireMonkey 入门(17) - 特效

    刚打开 XE2 时, 就从 Tool Palette 窗口的 Effects 组中发现洋洋洒洒的六十多个特效... 每个特效分别对应一个类, 分别来自 FMX.Effects 和 FMX.Filter ...

  6. Delphi XE2 之 FireMonkey 入门(10) - 常用结构 TPoint、TPointF、TSmallPoint、TSize、TRect、TRectF 及相关方法...

    它们都是结构, TPointF.TRectF 属新增, 其它也都有升级; 现在都拥有丰富的方法和方便的运算符重载; 且有一组相关的公共函数. 这组内容重要的是它们都来自 System.Types 单元 ...

  7. Delphi XE2 之 FireMonkey 入门(2)

    FireMonkey 的控件都是自己绘制的(而不是基于系统组件), 我想它们应该是基于一些基本图形; 就从基本图形开始吧. FMX.Objects 单元给出的类: TShape //基本图形的基类 T ...

  8. Delphi XE2 之 FireMonkey 入门(23) - 数据绑定: TBindingsList: TBindExpression

    准备用 TBindingsList 重做上一个例子. 可以先把 TBindingsList 理解为是一组绑定表达式(TBindExpression)的集合; 官方应该是提倡在设计时完成 TBindEx ...

  9. Delphi XE2 之 FireMonkey 入门(30) - 数据绑定: TBindingsList: TBindExpression 的 OnAssigningValue 事件...

    为什么80%的码农都做不了架构师?>>>    表达式中的函数有限, 譬如我想通过绑定输出文本的长度(譬如在 Label1 中绑定输出 Edit1.Text 的长度)就没有相应的函数 ...

最新文章

  1. 重温目标检测--YOLO v1
  2. NEO改进协议提案2(NEP-2)
  3. CF993E:Nikita and Order Statistics(FFT)
  4. Tensorflow中张量数据类型的转换
  5. linux 使用 cp 命令强制覆盖功能
  6. c语言课程笔记格式,C语言课程学习笔记.docx
  7. python 生成xml文件
  8. 人工智障学习笔记——深度学习(4)生成对抗网络
  9. Linux内核深入理解系统调用(1):初始化-入口-处理-退出
  10. Liferay被SourceForge评为7月最佳开源项目
  11. redis sentinel 哨兵
  12. 按周显示的日历和按月显示的日历,你需要吗
  13. 原码一位乘的数值运算
  14. 短视频系统源码,android 真正的全屏沉浸式体验
  15. [论文笔记]Teaching Machines to Read and Comprehend
  16. Windows10添加自定义右键菜单(详细步骤)
  17. 三国无双模型数据结构。。。
  18. Qt编写可视化大屏电子看板系统4-布局另存
  19. 《深入浅出人工智能(第2版)》之“什么是人工智能?”
  20. android平板开发板,基于ARM Cortex A9开发板平板电脑实战项目

热门文章

  1. Linux调试——gdb调试器的简单使用调试coredump文件
  2. Android中finish()、System.exit()、KillProcess()的区别
  3. pyqt5教程13:客户定制组件
  4. extjs获取焦点和失去焦点_[NBA夏联]焦点单三连红,NBA夏季联赛同样精彩
  5. matlab 单元,MATLAB单元阵列
  6. 百度文本审核api_利用百度ai实现文本和图片审核
  7. oracle12 官网文档,Oracle 21c 官方文档 发布了
  8. 二叉树的层序遍历 使用队列和不使用队列
  9. 第八天2017/04/17(3、C++的几个语法)
  10. 记录下两个孩子在MineCraft里面还原公寓的经历