Delphi XE2 之 FireMonkey 入门(12) - 动画(上)
在 HD 窗体上添加一个 TAniIndicator, 修改其 Enabled 属性为 True, 动画完成了.
这是最简单的动画相关的控件了, 只有两个值得注意的属性:
- Enabled: Boolean; //
- Style: TAniIndicatorStyle; //TAniIndicatorStyle = (aiLinear, aiCircular);
- {例}
- AniIndicator1.Style := TAniIndicatorStyle.aiCircular;
它是怎么动起来的? 追源码, 发现它有一个 FAni: TFloatAnimation; 内部变量.
再就追出 TFloatAnimation 的父类 TAnimation; TAnimation 在 FMX.Types 单元, 看来是核心成员了.
TAnimation 的子类们都在 FMX.Ani 单元:
- TFloatAnimation //
- TFloatKeyAnimation //
- TColorAnimation //
- TColorKeyAnimation //
- TGradientAnimation //
- TPathAnimation //
- TRectAnimation //
- TBitmapAnimation //
- TBitmapListAnimation //
- TFloatKeyAnimation //
- TColorKeyAnimation //
早在 TFmxObject(FMX 们的祖先)就有了一些动画相关的方法:
- StartAnimation(); //
- StopAnimation(); //
- StartTriggerAnimation(); //
- StartTriggerAnimationWait(); //
- StopTriggerAnimation(); //
- AnimateFloat(); //
- AnimateColor(); //
- AnimateFloatDelay(); //
- AnimateFloatWait(); //
- StopPropertyAnimation(); //
另在 FMX.Types 单元还有一些动画插入算法的一些公用函数(应该主要是内部使用):
- InterpolateSingle(); //
- InterpolateRotation(); //
- InterpolateColor(); //
- InterpolateLinear(); //
- InterpolateSine(); //
- InterpolateQuint(); //
- InterpolateQuart(); //
- InterpolateQuad(); //
- InterpolateExpo(); //
- InterpolateElastic(); //
- InterpolateCubic(); //
- InterpolateCirc(); //
- InterpolateBounce(); //
- InterpolateBack(); //
很多动画应该在设计时就可以方便完成, 在选择某些属性值时可直接添加动画, 如:
- //Bitmap 属性:
- Create New TBitmapAnimation
- Create New TBitmapListAnimation
- //Color 属性:
- Create New TColorAnimation
- Create New TColorKeyAnimation
- //Gradient 属性:
- Create New TGradientAnimation
- //Width、Height、X、Y、StrokeThickness、XRadius、YRadius、Opacity、RotationAngle 等属性:
- Create New TFloatAnimation
- Create New TFloatKeyAnimation
先尝试一个让控件转起来的动画吧:
添加一个 TRectangle, 从其 RotationAngle 属性 Create New TFloatAnimation (需要删除时, 选定后按 Delete),
然后调整自动建立的 FloatAnimation1 的属性值:
- //一般在设计时取值即可, 下面是运行时的代码:
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- FloatAnimation1.Enabled := True;
- FloatAnimation1.Loop := True;
- FloatAnimation1.Duration := 2.5; //一个动画周期的长度(秒)
- FloatAnimation1.StartValue := ; //起点角度
- FloatAnimation1.StopValue := ; //终点角度
- end;
在设计时制作上面动画的另一方法:
1、添加 TRectangle(Rectangle1);
2、选定 Rectangle1 后添加 TFloatAnimation(FloatAnimation1);
3、修改 FloatAnimation1 的属性 PropertyName 值为 RotationAngle;
4、如上设置 FloatAnimation1 的其它属性.
完全在运行时实现上面动画的代码:
- uses FMX.Objects, FMX.Ani; //添加, 但不要重复添加
- var
- rect: TRectangle;
- procedure TForm1.FormCreate(Sender: TObject);
- begin
- rect := TRectangle.Create(Self);
- rect.Parent := Self;
- rect.Align := TAlignLayout.alCenter;
- with TFloatAnimation.Create(Self) do
- begin
- Parent := rect;
- PropertyName := 'RotationAngle';
- Enabled := True;
- Loop := True;
- Duration := 2.5;
- StartValue := ;
- StopValue := ;
- end;
- end;
Delphi XE2 之 FireMonkey 入门(12) - 动画(上)的更多相关文章
- Delphi XE2 之 FireMonkey 入门(13) - 动画(下)
TAnimation 类的主要成员: protected function NormalizedTime: Single; // procedure ProcessAnimation ...
- 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 入门(38) - 控件基础: TPopupMenu、TMenuItem、TMenuBar、TMainMenu
Delphi XE2 之 FireMonkey 入门(38) - 控件基础: TPopupMenu.TMenuItem.TMenuBar.TMainMenu 相关控件: TMenuBar.TPopup ...
- 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 入门(31) - 数据绑定: 绑定数据库
Delphi XE2 之 FireMonkey 入门(31) - 数据绑定: 绑定数据库 一.全设计时操作: 先在窗体上放置控件: DataSource1 : TDataSource; Clie ...
随机推荐
- spark(3)
0.spark -------------------------------------------- transformation map filter repartition spark核心AP ...
- 安装RF
pip install robotframework wxPython pip install robotframework-ride pip install --pre --upgrade robo ...
- linux MySql 在 Master 主从复制配置
在 Master 服务器上建立用于 Slave 服务器复制数据的帐户 [root@master ~]# mysql mysql> grant replication slave,replicat ...
- 几个有关FPGA的概念
<数字设计——原理和实践>(John F.Wakerly)的书 FPGA同步时钟设计 简单说就是 一个系统中(或系统中的一部分)都采用同一个时钟触发.系统中的(D)触发器全部都连接到一个时 ...
- Codeforces Round #427 (Div. 2) - B
题目链接:http://codeforces.com/contest/835/problem/B 题意:给定一个数k和一个数字串n.问你最少改几个数字才能满足所有数字的和不小于k. 思路:考虑贪心,每 ...
- evpp::buffer使用
evpp::Buffer testmsg; const char* buf123 = "12342333333333333333333333333323424324234234"; ...
- 什么是LMDB闪电记忆映射数据库
LightningMemory-MappedDatabase(LMDB)是一个软件库,它以键值存储的形式提供高性能的嵌入式事务数据库.LMDB是用C语言编写的,具有多种编程语言的API绑定.LMDB将 ...
- Angular前端开源框架
1. 项目框架介绍 本项目采用了开源项目ngx-admin作为脚手架.基于Angular 8 +,Bootstrap 4+和Nebular,ngx-admin是最受欢迎的后台管理模板,是用于个人和商 ...
- 利用BeautifulSoup爬去我爱我家的租房数据
因为之前对BeautifulSoup一直不是很熟悉,刚好身边的朋友同事在找房子,就想着能不能自己写个爬虫爬一下数据,因此就写了这个爬虫.基本都是边看书边写的,不过也没什么好讲的.直接粘代码了. # c ...
- Comet OJ - Contest #6 D. 另一道树题 并查集 + 思维 + 计数
Code: #include <cstdio> #include <algorithm> #include <cstring> #include <vecto ...