TAnimation 类的主要成员:


protected
  function NormalizedTime: Single;      //
  procedure ProcessAnimation; virtual;  //其子类们主要通过覆盖此方法来实现不同的动画
  procedure Loaded; override;          //
public
  procedure Start; virtual;            //播放
  procedure Stop; virtual;              //停止
  procedure StopAtCurrent; virtual;    //停止在当前帧; 和 Pause 属性不同的是它会触动 OnFinish 事件
  procedure StartTrigger(...); virtual; //如果不是覆盖, 一般应使用 Trigger、TriggerInverse 属性而不是该方法
  procedure ProcessTick(...);          //内部使用的动画执行方法, 主要由它来调用 ProcessAnimation 过程.
  property Running: Boolean ...;        //是否运行中; 只读
  property Pause: Boolean ...;          //暂停
published
  property AnimationType: TAnimationType ...;    //动画类型; 它好像只影响到插入(Interpolation)算法
  property AutoReverse: Boolean ...;              //自动逆向(起点->终点->起点)
  property Enabled: Boolean ...;                  //是否可用
  property Delay: Single ...;                    //延迟多少秒再开始动画
  property Duration: Single ...;                  //动画长度(秒); 其子类一般会默认为 0.2
  property 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; 测试代码:


const
  strPath = '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);
begin
  PathAnimation1.Path.Data := strPath;
  PathAnimation1.Duration := ;
  PathAnimation1.AutoReverse := True;
  PathAnimation1.Loop := True;
  PathAnimation1.Rotate := True;
  PathAnimation1.Enabled := True;
end; { 如果要把路径显示出来, 还需要使用 TPath, 它是专用于呈现路径数据的. }

另外: 动画应该可以叠加和嵌套的, 暂不再深究.

还有, 真的在实用时, 使用这些类恐怕不如直接使用 FMXObject 中的方法来得便宜, 如:


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

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

  1. Delphi XE2 之 FireMonkey 入门(12) - 动画(上)

    在 HD 窗体上添加一个 TAniIndicator, 修改其 Enabled 属性为 True, 动画完成了. 这是最简单的动画相关的控件了, 只有两个值得注意的属性: Enabled: Boole ...

  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 入门(37) - 控件基础: TControl 概览

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

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

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

  8. Delphi XE2 之 FireMonkey 入门(28) - 数据绑定: TBindingsList: 表达式函数测试: SelectedText()、CheckedState()

    Delphi XE2 之 FireMonkey 入门(28) - 数据绑定: TBindingsList: 表达式函数测试: SelectedText().CheckedState() 示例构想: 用 ...

  9. Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid、TGrid

    Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid.TGrid TStringGrid.TGrid 都是从 TCustomGrid 继承; 区别有:1 ...

随机推荐

  1. 使用SecureCRT 8.5快速打开sftp传输文件

    一般使用Windows系统上安装的SecureCRT 8.5软件远程连接Linux服务器,通常给Linux系统传输文件或者使用FTP,或者使用SFTP等其他第三方软件,有时Linux系统上还需要做其他 ...

  2. HTML第一课(前期知识准备)

    在正式的学习之前,我们先了解一些前端方面的常识. 一.前端是做什么? 如果有认真看过我写的预备程序员不得不知道的事儿这篇文章的同学应该清楚,前端的工作在整个项目开发中处于代码编写阶段,主要是用来做界面 ...

  3. __bridge

    Core Foundation 框架Core Foundation框架 (CoreFoundation.framework) 是一组C语言接口,它们为iOS应用程序提供基本数据管理和服务功能.下面列举 ...

  4. C# wpf image绑定viewModel没有显示图片

    在wpf绑定图片,用viewModel的图片绑定image 我是用viewModel.cs public class viewModel:INotifyPropertyChanged { #regio ...

  5. 定时任务crond、crontab

    crontab命令是用来设置定时任务规则的配置命令,配置文件/etc/crontab 与/var/spool/cron/目录下当前用户名的文件. -l 显示当前定时任务 -e 编辑定时任务 对于roo ...

  6. Java并发——DCL问题

    转自:http://www.iteye.com/topic/875420 如果你搜索网上分析dcl为什么在java中失效的原因,都会谈到编译器会做优化云云,我相信大家看到这个一定会觉得很沮丧.很无助, ...

  7. Linux下Centos7对外开放端口

    转载:https://blog.csdn.net/realjh/article/details/82048492 命令集合: ()查看对外开放的端口状态 查询已开放的端口 netstat -anp 查 ...

  8. 手机能连接上ipsec

    手机能连接上,但是FQ不行,路由也正常,iptables也设置,内核转发也弄了,暂时需要看看日志才行了,不知道什么情况,其他类型的没问题

  9. Hive 笔试题

    Hive 笔试题 考试时间: 姓名:____________ 考试成绩:____________ 考试时长:180 分钟 注意事项: 1. 自主答题,不能参考任何除本试卷外的其它资料. 2. 总成绩共 ...

  10. proxy配置

    关于config.js里面proxy的配置:                  proxy: { '/api': { target: 'http://192.168.***.**:8500', cha ...