• 图文解说ChinaCock过场动画的实现


    在即将到来的ChinaCock组件新版中,将支持独家实现的Form过场动画实现方案,在Form与Form调用之间增加过场动画。

    该实现有以下优点:

    1.动画实现与业务分离,耦合度低,动画的实现,不与窗口上的任何可视与非可视组件发生关系,完全独立,只要一行代码就能增加动画效果,仅仅需要调用动画类的进场方法PushToForm或出场方法PopBackForm

    2.Form与Form耦合度低,源窗口与目标窗口的调用,只是改用动画类TCCFormTransition来显示与关闭目标窗口。

    3.适配Delphi原生的Form建立方式,当在Delphi建立一个窗口时,他会自动为窗口声明一个实例变量,我们使用这个变量来显示窗口即可。

    4.过场动画自然流畅、无闪烁。作者在实现过程中,做了大量的优化工作,采用了原生的平台SDK方法,最终实现最优的执行效率,从而实现动画全程无闪烁,自然流畅的效果。

    5.跨平台,目前适配Windows与Android平台。

    接下来,我们看看,如何在实际项目中,使用上面的实现方案:

    对于我的项目,有一个MainForm,做为主窗口,当进入App时显示的界面,在这个窗口上,用户要进行业务操作,这时候要调用其他的窗口,比如,要做身份验证,采集用户的身份证,我们把这个窗口定义CameraIdCardForm。

    1.MainForm调用CameraIdCardForm,看代码:

    procedure TMainForm.Text3Click(Sender: TObject);
    begin
      if not Assigned(CameraIdCardForm) then//这里我们建立目标窗口
        CameraIdCardForm := TCameraIdCardForm.Create(Application);
      
    //用动画显示目标窗口 TCCFormTransition.PushToForm(Self, CameraIdCardForm, TCCFormTransition.TTransitionType.SlideInFromRight, False,
    procedure(AInfo: TCCFormTransition.TFormTransitionInfo) begin

    //目标窗口显示完成调用这个回调函数,你可以进一步对目标窗口做初始化动作,比如,加载数据 // showmessage('PushComplete'); end, procedure(AInfo: TCCFormTransition.TFormTransitionInfo) begin

    //目标窗口关闭时,调用的回调函数,你可以能过AInfo.ToForm取得目标窗口,使用他来做业务处理 //TCameraIdCardForm(AInfo.ToForm).

        //这里,我们可以释放目标窗口  FreeAndNil(CameraIdCardForm); // showmessage('PopComplete'); end); end;

    代码中,可以看到,只是一个方法,就为调用窗口加载了动画。

    PushToForm的参数说明:

    class procedure TCCFormTransition.PushToForm(
      AFrom, //原窗口,即调用窗口
      ATo: TCustomForm; //目标窗口,即被调用窗口,由原窗口负责实例化
      const ATransType: TTransitionType = SlideInFromRight; //动画类型  
      const AFixedFrom: Boolean = false;//实现原窗口不动,只为目标窗窗增加动画
      const APushComplete: TProc<TFormTransitionInfo> = nil; //目标窗口显示完的回调
      const APopComplete: TProc<TFormTransitionInfo> = nil); //目标窗口关闭后的回调

    现在你看到了,一行代码实现过场动画,是不是非常简单!

    2.再来看一下,CameraIdCardForm关闭时,增加动画的实现:

    //窗口上的返回按钮
    procedure TCameraIdCardForm.TextBackClick(Sender: TObject);
    begin
      DoPopBackForm(mrCancel);
    end;
    
    //返回方法
    procedure TCameraIdCardForm.DoPopBackForm(const AModalResult: TModalResult);
    begin
      self.ModalResult := AModalResult;//这一行不是必须的,按你需要
      TCCFormTransition.PopBackForm();//显示关闭动画后关闭当前窗口
    end;

    同样是一行代码,就实现了关闭窗口的动画。

    现在,你已经看到,为窗口间调用增加过场动画,在不改变原来实现的情况下,只用了两行代码,就完成了!

    最后,来张实际的效果图:

  • 相关阅读:
    postgres 流复制集群配置(一)
    postgres 文件系统级别的备份 pg_dump
    postgres 基于基础备份的恢复操作 (二)
    postgres 基于基础备份的恢复操作 之恢复文件详解recover.conf(一)
    postgres 基础备份-->pg_basebackup (二)
    postgres 基础备份-->pg_start_ backup与pg_stop_ backup (一)
    postgres WAL归档
    postgres 并行扫描--索引的正确打开方式
    Python标准库
    awesome python 中文版 相见恨晚!
  • 原文地址:https://www.cnblogs.com/kinglandsoft/p/16219516.html
Copyright © 2020-2023  润新知