Delphi XE2 之 FireMonkey 入门(13) - 动画(下)

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.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; 测试代码:


 

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/dzdd/p/3346829.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/421502.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 触发器 插入或者更新,MySQL 在触发器里中断记录的插入或更新?

下面是一种实现的方法。思路就是想办法在触发器中利用一个出错的语句来中断代码的执行。mysql> create table t_control(id int primary key);Query OK, 0 rows affected (0.11 sec)mysql> insert into t_control values (1);Query OK, 1 row affected (0.05 sec)mysql&g…

BZOJ 1601 [Usaco2008 Oct]灌水 (最小生成树)

题意 Farmer John已经决定把水灌到他的n(1<n<300)块农田&#xff0c;农田被数字1到n标记。把一块土地进行灌水有两种方法&#xff0c;从其他农田饮水&#xff0c;或者这块土地建造水库。 建造一个水库需要花费Wi(1<Wi<100000),连接两块土地需要花费Pij(1<pij<…

matlab mxarray array,[Matlab]MxArray与MwArray使用区别

引子在外部编程语言与matlab的交互中&#xff0c;Array是最单元的交互元素&#xff0c;怎么都绕不过去。在matlab提供的Array接口有两个&#xff0c;一个是C的MxArray, 另一个是Cpp(C)的MwArray.看下两着的分别介绍&#xff1a;mxArray&#xff1a;Matlab C 函数库的结构体mwAr…

NSARRAY的 内存管理

一个对象加入到nsarray里内存计数器会1,当这个nsarrayrelease的时候,回自动减1,程序员不需要管理这方面的内存.转载于:https://www.cnblogs.com/gm-lotus/p/3349509.html

blender怎么移动骨骼,Blender学习笔记-(015)创建骨骼绑定及权重绘制操作详解

骨骼创建绑定具体操作如下&#xff1a;1&#xff1a; 【ShiftA】创建基础骨骼。(也可以通过打开Blender的插件Rigging&#xff1a;Rigify&#xff0c;生成自定义骨骼)2&#xff1a;点击骨骼&#xff0c;按【Tab】键进入编辑模式&#xff0c;选中创建骨骼端&#xff0c;按【E】拖…

[MySQL binlog实战] 增量同步与数据搜索~从入门到精通

学习基础知识&#xff0c;并落实到实际场景&#xff08;增量同步数据搜索&#xff09; 对基础知识不感兴趣的&#xff0c;可以直接跳到应用场景 文章目录 binlog是什么简介产生方式文件格式statementrowmixed 怎么办开启 binlog查看 binlog其他查看相关命令运维查看 binlog设置…

从硬核科幻小说《三体》中看嵌入式

1 2 3 4 5 6 7 8 9 转载于:https://www.cnblogs.com/OleNet/p/3352189.html

matlab潮流计算求节点自导纳,大神们,求个电力系统潮流计算的matlab程序。

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼ninput(Please input n\n); %n表示系统的节点数d0input(Please input d0\n); %d0表示系统的误差minput(Please inpit m\n); %m表示系统的pq节点的个数p0ones(n-1,1);q0ones(m,1);d1;dpvones(n-1,1);dqvones(m,1);dpzeros(n-1,1);dq…

早晨爬山,三餐自备——程序员也可以这样生活、工作

没有参加工作以前&#xff0c;在香港及国外的电影里经常会有在家吃了自做早餐后再悠闲的去上班的情节&#xff0c;当时充满了向往。 从事程序开发以来&#xff0c;电脑前坐12个小时是常态&#xff0c;坐14个小时不稀奇&#xff0c;坐14个小时以上十有一二。而早餐&#xff1f;经…

php快速排序和二分查找法,二分查找及快速排序

小朋友二分查找和快速排序思想上有很大的相似度&#xff0c;就是做一个起始点&#xff0c;开始往左右做动作&#xff0c;也同样是由递归实现&#xff0c;当然也可以不用递归实现。但是我觉得也不能用php内置特有的函数- -&#xff0c;我找了很多php的快速排序&#xff0c;几乎都…

php 三目格式,PHP-您使用哪种编码风格的三元运算符?

PHP-您使用哪种编码风格的三元运算符&#xff1f;如果很短&#xff0c;我将其放在一行中。 最近&#xff0c;我一直在将这种样式用于较长或嵌套的三元运算符表达式。 一个人为的例子&#xff1a;$value ( $a $b )? true value # 1: ( $a $c )? true value # 2: false valu…

extractCSS – 帮助你从 HTML 中快速分离出 CSS

extractCSS 是一个免费的基于 Web 的应用程序&#xff0c;能够从 HTML 中提取风格相关的信息&#xff0c;包括 id、class 和内联样式&#xff0c;而且输出可以定制&#xff08;缩进和括号的用法&#xff09;。该工具非常有用&#xff0c;当我们快速创建一个使用了内联样式的 HT…

php项目安装器,php项目安装器程序源码,php通用安装程序

php项目安装器程序源码,php通用安装程序一个安装器的源码&#xff0c;最简单的看一下emlog 也可以&#xff01;文件目录结构index.php 程序首页│ ├─conf 安装后配置文件目录├─data    目录写入测试目录└─install 安装程序目录 │ index.php   安装程…

7zip File: How to Uncompress 7z files on Ubuntu, Debian, Fedora

转&#xff1a;http://www.thegeekstuff.com/2010/04/7z-7zip-7za-file-compression/ Question: How do I uncompress a *.7z file ( 7zip file ) in UNIX / Linux ? Can you explain with a simple example? Answer: Use 7za command to unzip a 7z file ( 7zip file ) on U…

php找不到邮件类,SMTP无法使用php邮件程序类

我有两个帐户&#xff1a;no-replyweddinggrabs.comno-replyappovio.com和传入POP3&#xff1a;pop.secureserver.net(995)传出SMTP&#xff1a;smtpout.secureserver.net(80,3535,25,465)这些工作使用电子邮件客户端,如Thunderbird,post-box等,但不使用php-mailer&#xff1a;…

Python开发环境Wing IDE 5.0测试第八版发布

Wing IDE是著名的Python开发工具&#xff0c;是Wingware公司的主要产品。从1999年起&#xff0c;Wingware公司便开始专注于Python开发设计。Wing IDE在十几年的发展中&#xff0c;不管完善。其强大设计理念包括&#xff1a;编辑工具丰富&#xff0c;编译测试版权一体化&#xf…

PHP5比PHP4,php4和php5的配置异同比较

技术文章配置php4或者php5的过程中&#xff0c;php4&#xff0c;5的配置的步骤大致一样的&#xff0c;但是配置内容有一些差别。在LINUX等环境下编译&#xff0c;一般来说&#xff0c;只要编译的选项正确&#xff0c;配置也就正确了&#xff1b;在windows配置则需要注意以下不同…

matlab文件序号超出511,求教一段matlab的代码 - 数学 - 小木虫 - 学术 科研 互动社区...

不知楼主说的没法求出优化值&#xff0c;是什么意思。是报错还是怎么。我也是刚接触优化&#xff0c;觉得楼主的错误可能是在&#xff1a;主函数里 A[-1;1];的括号中间应该用逗号&#xff0c;而不是分号。即改为A[-1,1];我对你的程序做了一点改动&#xff0c;如下&#xff1a;f…