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 ...
随机推荐
- P3198 [HNOI2008]遥远的行星
传送门 发现 $A$ 不大,又允许较大的误差,考虑乱搞 考虑求出每个位置的答案,因为有 $1e5$ 个位置,所以每个位置差不多可以计算 $100$ 次贡献 所以把每个可以贡献的位置尽量均匀分成 $10 ...
- kNN分类算法实现
kNN算法就是计算每个点到其他所有点的距离,选出距离最小的k个点.在这k个点里,哪个类别的最多,就把待分类的点归到哪类. kNN.py: from numpy import * import oper ...
- 深度学习之(经典)卷积层计算量以及参数量总结 (考虑有无bias,乘加情况)
目录: 1.经典的卷积层是如何计算的 2.分析卷积层的计算量 3.分析卷积层的参数量 4.pytorch实现自动计算卷积层的计算量和参数量 1.卷积操作如下: http://cs231n.github ...
- SpringMVC拦截器(资源和权限管理)
转自:https://www.cnblogs.com/downey/p/4928951.html 1.DispatcherServlet SpringMVC具有统一的入口DispatcherServl ...
- ElasticSearch - 解决ES的深分页问题 (游标 scroll)
https://www.jianshu.com/p/f4d322415d29 1.简介 ES为了避免深分页,不允许使用分页(from&size)查询10000条以后的数据,因此如果要查询第10 ...
- 微信授权获取code/openid
微信网页授权 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑. 关于网页授权回调域名的说明 1.在微信公众号请求用户网页授权之前,开发者需要 ...
- 下载zip
- POJ 3667 Hotel (线段树区间合并)
题目链接:http://poj.org/problem?id=3667 题目大意:一共有n个房间,初始时都是空的,现在有m个操作,操作有以下两种: 1.1 d :询问是否有连续d个空的房间,若有则输出 ...
- qt02 textEdit
1.向QTextEdit中当前光标位置添加一行字符串message ui.messageTextEdit->textCursor().insertText(message+"\n&qu ...
- layui 动态添加 表格数据
静态表格: <table class="layui-table" id="table" lay-filter="table"> ...