Delphi XE2 之 FireMonkey 入门(13) - 动画(下)
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'
TFloatKeyAnimation、TColorKeyAnimation 可通过其 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) - 动画(下)的更多相关文章
- Delphi XE2 之 FireMonkey 入门(12) - 动画(上)
在 HD 窗体上添加一个 TAniIndicator, 修改其 Enabled 属性为 True, 动画完成了. 这是最简单的动画相关的控件了, 只有两个值得注意的属性: Enabled: Boole ...
- Delphi XE2 之 FireMonkey 入门(35) - 控件基础: TFmxObject: 其它
Delphi XE2 之 FireMonkey 入门(35) - 控件基础: TFmxObject: 其它 TFmxObject 增加了 TagObject.TagFloat.TagString, 算 ...
- Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题
Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题 很喜欢 FMX 的一些新控件, 如: TExpander.TArcDial.TComboTrackBar.T ...
- Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView、TTreeViewItem
Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView.TTreeViewItem TScrollBox -> TCustomTreeView -> ...
- Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox、TVertScrollBox、TFramedScrollBox、TFramedVertScrollBox
Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox.TVertScrollBox.TFramedScrollBox.TFramedVertScrollB ...
- Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览
Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览 { TControl } public constructor Create(...); ov ...
- Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm
Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm 当我第一次读取 Form1.StyleLookup 并期待出现 "formstyle" 时 ...
- Delphi XE2 之 FireMonkey 入门(28) - 数据绑定: TBindingsList: 表达式函数测试: SelectedText()、CheckedState()
Delphi XE2 之 FireMonkey 入门(28) - 数据绑定: TBindingsList: 表达式函数测试: SelectedText().CheckedState() 示例构想: 用 ...
- Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid、TGrid
Delphi XE2 之 FireMonkey 入门(43) - 控件基础: TStringGrid.TGrid TStringGrid.TGrid 都是从 TCustomGrid 继承; 区别有:1 ...
随机推荐
- Paper Reading_Computer Architecture
最近(以及预感接下来的一年)会读很多很多的paper......不如开个帖子记录一下读paper心得 Computer Architecture Last level cache (llc) perf ...
- luogu P1399 [NOI2013]快餐店
传送门 注意到答案为这个基环树直径\(/2\) 因为是基环树,所以考虑把环拎出来.如果直径不过环上的边,那么可以在环上每个点下挂的子树内\(dfs\)求得.然后如果过环上的边,那么环上的部分也是一条链 ...
- Nginx1.3.15导致Wordpress,Drupal等框架无限重定向的解决方案
Wordpress建立的站点出现无限循环重定向问题.很多人遇到这个问题,并不是单纯Wordpress,Drupal, PHPCake等框架也都遇到同样的问题. 新版本的Nginx在收到 http:// ...
- 图解Qt安装(Windows平台)
http://c.biancheng.net/view/3858.html 本节介绍 Qt 5.9.0 在 Windows 平台下的安装,请提前下载好 Qt 5.9.0.不知道如何下载 Qt 的读者请 ...
- Linux学习--第五天--vim使用、rpm命令
vim使用 三种模式: 编辑模式 插入模式 命令模式 |命令|作用| |--|--| |a|在光标字符后插入| |A|在光标行尾插入| |i|在光标字符前插入| |I|在光标行首插入| |o|在光标下 ...
- Linux架构之Nginx 七层负载均衡
第50章 Nginx七层负载均衡 一.Nginx负载均衡基本概述 1)为什么要使用负载均衡 当我们的Web服务器直接面向用户,往往要承载大量并发请求,单台服务器难以负荷.使用多台Web服务器组成集群, ...
- 特殊权限位:suid、sgid、sticky
linux系统特殊权限位 suid.sgid.stickysuid 使任意用户获得用文件属主相同的权限,sgid使用户获得与文件属组相同的权限(通过sgid获得的权限等同于同一用户组的权限) 表示方法 ...
- CRMEasy知识库访问权限
知识库设置BCCBINFO文件夹为共享文件夹,给予普通域用户和管理员域用户完全控制权限,但是当以管理员域用户身份对文件进行操作后,以普通域用户登录不会有效果,甚至出现“访问权限”的错误,这是由于文件夹 ...
- 10年前文章_respin 下制作iso 文件的脚本说明
1.prepare_spin.sh 用于在 /var/rpm 下生成 lhs-local 需要的repositery 2.respin.sh 使用revisor 生成 iso 3. post_spi ...
- 【vue-cli 3.0】 vue.config.js配置 - 路径别名
如何配置vue-cli 3中vue.config.js的路径别名? 前段时间更新电脑重装了一下vue-cli,发现了vue-cli已经更新到3.0版.用来搭建项目后发现简化了很多,而且配置文件现在可以 ...