在 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) - 动画(上)的更多相关文章

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

    TAnimation 类的主要成员: protected   function NormalizedTime: Single;      //   procedure ProcessAnimation ...

  2. Delphi XE2 之 FireMonkey 入门(35) - 控件基础: TFmxObject: 其它

    Delphi XE2 之 FireMonkey 入门(35) - 控件基础: TFmxObject: 其它 TFmxObject 增加了 TagObject.TagFloat.TagString, 算 ...

  3. Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题

    Delphi XE2 之 FireMonkey 入门(45Finally) - 结题与问题 很喜欢 FMX 的一些新控件, 如: TExpander.TArcDial.TComboTrackBar.T ...

  4. Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView、TTreeViewItem

    Delphi XE2 之 FireMonkey 入门(44) - 控件基础: TTreeView.TTreeViewItem TScrollBox -> TCustomTreeView -> ...

  5. Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox、TVertScrollBox、TFramedScrollBox、TFramedVertScrollBox

    Delphi XE2 之 FireMonkey 入门(39) - 控件基础: TScrollBox.TVertScrollBox.TFramedScrollBox.TFramedVertScrollB ...

  6. Delphi XE2 之 FireMonkey 入门(38) - 控件基础: TPopupMenu、TMenuItem、TMenuBar、TMainMenu

    Delphi XE2 之 FireMonkey 入门(38) - 控件基础: TPopupMenu.TMenuItem.TMenuBar.TMainMenu 相关控件: TMenuBar.TPopup ...

  7. Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览

    Delphi XE2 之 FireMonkey 入门(37) - 控件基础: TControl 概览 { TControl } public   constructor Create(...); ov ...

  8. Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm

    Delphi XE2 之 FireMonkey 入门(36) - 控件基础: TForm 当我第一次读取 Form1.StyleLookup 并期待出现 "formstyle" 时 ...

  9. Delphi XE2 之 FireMonkey 入门(31) - 数据绑定: 绑定数据库

    Delphi XE2 之 FireMonkey 入门(31) - 数据绑定: 绑定数据库 一.全设计时操作: 先在窗体上放置控件: DataSource1    : TDataSource; Clie ...

随机推荐

  1. ASP.NET Web API 使用Swagger

    ASP.NET Web API 使用Swagger使用笔记   最近换了工作,其中Webapi这块没有文档,之前有了解过Swagger借此机会好好整理下常用的地方分享给有需要的小伙伴. 概述: 1.s ...

  2. HTML A标签 href click事件冲突

    转自:https://blog.csdn.net/xinglu/article/details/45199337

  3. mysql常见函数及其用例

    函数调用:select 函数名(实参列表) [from 表]; 函数分类: 1.单行函数 如 concat.length.ifnull等. 2.分组函数 功能:做统计使用,又称为统计函数.聚合函数.组 ...

  4. SQL SERVER 索引维护

    -- 全数据库索引重建 DECLARE @name varchar(100)DECLARE authors_cursor CURSOR FOR Select [name] from sysobject ...

  5. vue-element添加修改密码弹窗

    1.新建修改密码vue文件CgPwd.vue 代码如下: <template> <!-- 修改密码界面 --> <el-dialog :title="$t('c ...

  6. java: Set类及子类:TreeSet有序子类,HashSet无序子类:重复元素

    Set类及子类: TreeSet有序子类: HashSet无序(散列)子类 HashSet子类的内容是没有顺序的,单个元素也不会重复的(对象除外). Set<String> allSet ...

  7. java基础拓展

    1. 作用域:public private protected 默认的区别 public:在同一项目中,被public修饰的在任何地方都可以被调用 private:被private修饰的,只能在本类中 ...

  8. 接口返回[object,Object]解决方法

    1.我们请求接口时有时会返回[object,Object],[object,Object],[object,Object].... 这个我们使用JSON.stringfity(data),就可以解决.

  9. 跳转控制语句return

    return语句的作用不是为了跳出循环,更常用的功能是结束一个方法,也就是退出一个方法,跳转到上层调用的方法处. 演示案例: 结束循环其实是结束了main方法 public static void m ...

  10. Java——容器(Auto-boxing/unboxing)

    [打包/解包] 在Map中需要增加一个数值时,需要new一个对象出来,输出后又得进行强制类型转换,这就造成不便.在JDK1.5中使用Map接口提供了一种新的机制.   在合适的时机自动打包/解包(在J ...