Delphi XE2 之 FireMonkey 入门(13) - 动画(下)
TAnimation 類的主要成員:
protectedfunction NormalizedTime: Single; //procedure ProcessAnimation; virtual; //其子類們主要通過(guò)覆蓋此方法來(lái)實(shí)現(xiàn)不同的動(dòng)畫procedure Loaded; override; // publicprocedure Start; virtual; //播放procedure Stop; virtual; //停止procedure StopAtCurrent; virtual; //停止在當(dāng)前幀; 和 Pause 屬性不同的是它會(huì)觸動(dòng) OnFinish 事件procedure StartTrigger(...); virtual; //如果不是覆蓋, 一般應(yīng)使用 Trigger、TriggerInverse 屬性而不是該方法procedure ProcessTick(...); //內(nèi)部使用的動(dòng)畫執(zhí)行方法, 主要由它來(lái)調(diào)用 ProcessAnimation 過(guò)程.property Running: Boolean ...; //是否運(yùn)行中; 只讀property Pause: Boolean ...; //暫停 publishedproperty AnimationType: TAnimationType ...; //動(dòng)畫類型; 它好像只影響到插入(Interpolation)算法property AutoReverse: Boolean ...; //自動(dòng)逆向(起點(diǎn)->終點(diǎn)->起點(diǎn))property Enabled: Boolean ...; //是否可用property Delay: Single ...; //延遲多少秒再開始動(dòng)畫property Duration: Single ...; //動(dòng)畫長(zhǎng)度(秒); 其子類一般會(huì)默認(rèn)為 0.2property Interpolation: TInterpolationType ...; //動(dòng)畫插入類型; 通過(guò)此選項(xiàng)可實(shí)現(xiàn)像反彈等多種動(dòng)畫效果(很好玩)property Inverse: Boolean ...; //逆向動(dòng)畫(終點(diǎn)->起點(diǎn))property Loop: Boolean ...; //循環(huán)播放property Trigger: TTrigger ...; //指定可觸發(fā)動(dòng)畫的事件; 其值是個(gè)字符串(見(jiàn)下表)property TriggerInverse: TTrigger ...; //指定可觸發(fā)逆向動(dòng)畫的事件; 其值是個(gè)字符串(見(jiàn)下表)property OnProcess: TNotifyEvent ...; //每個(gè)動(dòng)畫幀觸發(fā)的事件property OnFinish: TNotifyEvent ...; //停止時(shí)觸發(fā)的事件 end;{ Trigger、TriggerInverse 屬性的可選值: } 'IsMouseOver=true' 'IsMouseOver=false' 'IsFocused=true' 'IsFocused=false' 'IsVisible=true' 'IsVisible=false' 'IsDragOver=true' 'IsDragOver=false' 'IsOpen=true' 'IsOpen=false'
TFloatAnimation 用于尺寸變化的動(dòng)畫; TColorAnimation 用于顏色變化的動(dòng)畫; TGradientAnimation 用于顏色梯度動(dòng)畫; TRectAnimation 用于邊界(Padding、Margins)動(dòng)畫; 它們的擴(kuò)展屬性是一樣的(但參數(shù)類型不一樣):
StartValue //起點(diǎn)值 StopValue //終點(diǎn)值 StartFromCurrent //是否從當(dāng)前幀開始動(dòng)畫 PropertyName //動(dòng)畫要控制的屬性; 其值是個(gè)字符串(見(jiàn)下表){ 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 可通過(guò)其 Keys 屬性定義多個(gè)關(guān)鍵幀(前面幾種都只有兩個(gè)關(guān)鍵幀), 其屬性擴(kuò)展:
Keys //TKeys 類型的集合, 元素類型是 TKey; 主要使用 TKey.ID(關(guān)鍵幀序號(hào))、TKey.Key(參數(shù)值) 兩個(gè)屬性 PropertyName // StartFromCurrent //
TBitmapAnimation 用于兩張圖片的切換動(dòng)畫; 它的擴(kuò)展屬性有:
StartValue //起點(diǎn)圖片 StopValue //終點(diǎn)圖片 PropertyName //只能是 'Bitmap'
TBitmapListAnimation 只需要一張圖片, 根據(jù)需要的動(dòng)畫幀數(shù)(AnimationCount)把圖片均分, 然后讓切分后的各部分連成動(dòng)畫; 它的擴(kuò)展屬性有:
AnimationCount //動(dòng)畫幀數(shù) AnimationBitmap //圖片 PropertyName //
TPathAnimation 可以讓對(duì)象繞一個(gè)指定的路徑運(yùn)動(dòng); 它的擴(kuò)展屬性有:
Path: TPathData; //路徑數(shù)據(jù); 一般通過(guò) TPathData.Data 讀寫數(shù)據(jù), 數(shù)據(jù)(字符串)使用了 SVG 中 Path 的格式標(biāo)準(zhǔn) Rotate: Boolean; //是否旋轉(zhuǎn)(自轉(zhuǎn))
路徑動(dòng)畫簡(jiǎn)單示例: 先在 HD 窗體上放置一個(gè) TRectangle, 選定后給它添加一個(gè) TPathAnimation; 測(cè)試代碼:
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;{ 如果要把路徑顯示出來(lái), 還需要使用 TPath, 它是專用于呈現(xiàn)路徑數(shù)據(jù)的. }
另外: 動(dòng)畫應(yīng)該可以疊加和嵌套的, 暫不再深究.
還有, 真的在實(shí)用時(shí), 使用這些類恐怕不如直接使用 FMXObject 中的方法來(lái)得便宜, 如:
procedure TForm1.Button1Click(Sender: TObject); beginButton1.AnimateFloat('Position.X', Button1.Position.X*2, 1.5); end;
轉(zhuǎn)載于:https://www.cnblogs.com/khzide/articles/4493054.html
總結(jié)
以上是生活随笔為你收集整理的Delphi XE2 之 FireMonkey 入门(13) - 动画(下)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 极简易版专家聊天程序--JAVA练手
- 下一篇: 原型设计工具【收集转帖】