动画(animation)

动画在InoneGUI里分为窗口动画和控件动画两部分。

1.窗口动画是指窗口跳转时的变换动效,如A窗口跳转到B窗口。

 typedef enum _WndAnimatorType{
        EWND_ANIMATOR_NONE,
        EWND_ANIMATOR_HTRANSLATE,
        EWND_ANIMATOR_VTRANSLATE,
        EWND_ANIMATOR_FADE,
        EWND_ANIMATOR_CENTERSCALE,
        EWND_ANIMATOR_LTOR,
        EWND_ANIMATOR_RTOL,
        EWND_ANIMATOR_TTOB,    //top to bottom
        EWND_ANIMATOR_BTOT,
        EWND_ANIMATOR_SLIDEUP,
        EWND_ANIMATOR_SLIDEDOWN,
        EWND_ANIMATOR_SLIDELEFT,
        EWND_ANIMATOR_SLIDERIGHT,
        MAX_EWND_ANIMATOR,
}EWndAnimatorType;

wndanim inowndanim inowndanim1

设置窗口动画有两种方式:

  1. 全局动画配置,通过InoneGUI全局配置文件(inogui.cfg)设置,"anim"用于设置动画类型(值参考上面的枚举定义),"cttrt"用于配置动画窗口的位置信息。

    例如设置全局动画配置为中间放大EWND_ANIMATOR_CENTERSCALE

    "cttrt" : "0,45,800,435", 
    "anim"  : 4,
    
  2. 页面动画配置,用户在程序代码中配置窗口动画值。

    例如设置主页的动画为水平平移EWND_ANIMATOR_HTRANSLATE(动画是在页面START前处理,所以配置页面的动画建议在OnPageCreate里处理).

    VOID MainCtrl::OnPageCreate()
    {
    CLog::LogU("[%s:%s] \n",__FILE__,__FUNCTION__);
    mpPage->SetPageWndAnim(EWND_ANIMATOR_HTRANSLATE);
    }
    

    优先级: 页面动画配置 > 全局动画配置,即用户有配置页面动画,使用用户配置,否则使用全局动画配置值。

    2.控件动画是指控件运动动效,常用在控件的显示和消失等场景,让用户体验到现实中物体的效果。

    2.1 创建控件动画控制对象

    控件动画系统已经实现了其控制函数,用户仅需要配置相关参数来达成的期望效果,主要参数如下:

    /** 
    *  @brief Brief description 
    *  创建控件的动画控制类
    *  @param [in] pCtrl 需要动画控制的控件指针
    *  @param [in] eAnimType 控件动画实现的动画类型
    *  @param [in] eEasing 控件动画的动效曲线控制类型
    *  @param [in] iDelay 控件动画的启动延时时间Ms
    *  @param [in] iDuration 控件动画的运行周期时间Ms
    *  @return Return description 
    *       FAIL:返回NULL, OK:返回动画控制类对象指针
    *  @details More details 
    */
    CtrlAnimator* CreateCtrlAnimator(InoControl *pCtrl, ECtrlAnimType eAnimType = DEF_CTRLANIM_TYPE, EEasingType eEasing = DEF_CTRLANIM_EASING, UINT32 iDelay = DEF_CTRLANIM_DELAY, UINT32 iDuration = DEF_CTRLANIM_DURATION);
    

    例如:创建控件(mpWindow1)动画控制对象pbottomctrlanim,pbottomctrlanim = CAM->CreateCtrlAnimator(mpWindow1, ECTRL_ANIMATOR_MOVE, EEASING_BOUNCE_OUT);

  • ECtrlAnimType动画类型,当前仅实现ECTRL_ANIMATOR_MOVE

    typedef enum _CtrlAnimType{
          ECTRL_ANIMATOR_NONE,
          ECTRL_ANIMATOR_MOVE,
          ECTRL_ANIMATOR_FADE,
          MAX_ECTRL_ANIMATOR,
    }ECtrlAnimType;
    
  • EEasingType动效类型

    typedef enum _EasingType {
    EEASING_LINEAR = 0,
    EEASING_QUADRATIC_IN,
    EEASING_QUADRATIC_OUT,
    EEASING_QUADRATIC_INOUT,
    EEASING_CUBIC_IN,
    EEASING_CUBIC_OUT,
    EEASING_CUBIC_INOUT,
    EEASING_QUARTIC_IN,
    EEASING_QUARTIC_OUT,
    EEASING_QUARTIC_INOUT,
    EEASING_QUINTIC_IN,
    EEASING_QUINTIC_OUT,
    EEASING_QUINTIC_INOUT,
    EEASING_SIN_IN,
    EEASING_SIN_OUT,
    EEASING_SIN_INOUT,
    EEASING_POW_IN,
    EEASING_POW_OUT,
    EEASING_POW_INOUT,
    EEASING_CIRCULAR_IN,
    EEASING_CIRCULAR_OUT,
    EEASING_CIRCULAR_INOUT,
    EEASING_ELASTIC_IN,
    EEASING_ELASTIC_OUT,
    EEASING_ELASTIC_INOUT,
    EEASING_BACK_IN,
    EEASING_BACK_OUT,
    EEASING_BACK_INOUT,
    EEASING_BOUNCE_IN,
    EEASING_BOUNCE_OUT,
    EEASING_BOUNCE_INOUT,
    EEASING_FUNC_NR
    } EEasingType;
    

    动效对应的曲线图 easing_pic

2.2 设置控件动画监听函数

/**   
*  @brief 设置控件动画监听函数 
*  
*  @param [in] CbCtrlAnimListener: 回调函数   
*  @return [out] ERR_OK: 成功,其它NG  
*  
*  @details More details  
*/   
INT SetCtrlAnimatorListener(CbCtrlAnimListener pEventCb);

例如:设置控件动画监听函数CtrlAnimPageCallback, pbottomctrlanim->SetCtrlAnimatorListener(CtrlAnimPageCallback);

2.3 启动控件动画

/**   
*  @brief 启动控件动画 
*  
*  @param [in] VOID
*  @return [out] ERR_OK: 成功,其它NG  
*  
*  @details More details  
*/   
INT StartCtrlAnimator();

例如:启动控件(pbottomctrlanim)动画, pbottomctrlanim->StartCtrlAnimator();

2.4 停止控件动画

/**   
*  @brief 停止控件动画 
*  
*  @param [in] VOID
*  @return [out] ERR_OK: 成功,其它NG  
*  
*  @details More details  
*/   
INT StopCtrlAnimator();

例如:停止控件(pbottomctrlanim)动画, pbottomctrlanim->StopCtrlAnimator();

2.5 暂停控件动画

/**   
*  @brief 暂停控件动画 
*  
*  @param [in] VOID
*  @return [out] ERR_OK: 成功,其它NG  
*  
*  @details More details  
*/   
INT PauseCtrlAnimator();

例如:暂停控件(pbottomctrlanim)动画, pbottomctrlanim->PauseCtrlAnimator();

2.6 设置控件动画时间缩放

/**   
*  @brief 设置控件动画时间缩放 
*  
*  @param [in] VOID
*  @return [out] ERR_OK: 成功,其它NG  
*  
*  @details More details  
*/   
INT SetCtrlAnimator_TimeScale(FLOAT fTimeScale);

例如:设置控件(pbottomctrlanim)动画时间放大1.2倍, pbottomctrlanim->SetCtrlAnimator_TimeScale(1.2);

2.7 设置控件动画正反向播放

/**   
*  @brief 设置控件动画正反向播放 
*  
*  @param [in] bReversed: TRUE:反向播放/FALSE:正向播放
*  @return [out] ERR_OK: 成功,其它NG  
*  
*  @details More details  
*/   
INT SetCtrlAnimator_Reversed(BOOL bReversed);

例如:设置控件(pbottomctrlanim)动画反向, pbottomctrlanim->SetCtrlAnimator_Reversed(TRUE);

2.8 设置控件动画重复次数

/**   
*  @brief 设置控件动画重复次数 
*  
*  @param [in] iRepeatTimes: 重复次数
*  @return [out] ERR_OK: 成功,其它NG  
*  
*  @details More details  
*/   
INT SetCtrlAnimator_Repeat(UINT32 iRepeatTimes);

例如:设置控件(pbottomctrlanim)动画重复2次, pbottomctrlanim->SetCtrlAnimator_Repeat(2);

2.9 设置控件动画往返次数

/**   
*  @brief 设置控件动画往返次数 
*  
*  @param [in] iYoyoTimes: 往返次数
*  @return [out] ERR_OK: 成功,其它NG  
*  
*  @details More details  
*/   
INT SetCtrlAnimator_Yoyo(UINT32 iYoyoTimes);

例如:设置控件(pbottomctrlanim)动画往返2次, pbottomctrlanim->SetCtrlAnimator_Yoyo(2);

2.10 设置控件动画控件对象

/**   
*  @brief 设置控件动画控件对象 
*  
*  @param [in] pCtrl: 控件对象
*  @return [out] ERR_OK: 成功,其它NG  
*  
*  @details More details  
*/   
INT SetCtrlAnimator_Object(InoControl *pCtrl);

例如:设置控件(pbottomctrlanim)动画对象mpWindow2, pbottomctrlanim->SetCtrlAnimator_Object(mpWindow2);

2.11 设置控件动画动效类型

/**   
*  @brief 设置控件动画动效类型 
*  
*  @param [in] eEasing: 动效类型
*  @return [out] ERR_OK: 成功,其它NG  
*  
*  @details More details  
*/   
INT SetCtrlAnimator_Easing(EEasingType eEasing);

例如:设置控件(pbottomctrlanim)动画动效EEASING_POW_OUT, pbottomctrlanim->SetCtrlAnimator_Easing(EEASING_POW_OUT);

2.12 设置控件动画参数

/**   
*  @brief 设置控件动画参数 
*  
*  @param [in] strName: 动画参数键值(CTRLANIM_YRANG/CTRLANIM_XRANG)
*  @param [in] strVal: 动画参数值
*  @return [out] ERR_OK: 成功,其它NG  
*  
*  @details More details  
*/   
INT SetCtrlAnimator_PrivParam(STRING strName, STRING strVal);

例如:设置控件(pbottomctrlanim)动画参数CTRLANIM_YRANG为"480,334", pbottomctrlanim->SetCtrlAnimator_PrivParam(CTRLANIM_YRANG, "480,334");



控件动画示例代码,实现底部控制菜单和右边文件列表动态显示 ctrlanim

//1. 控件动画初始化
CtrlAnimator *pbottomctrlanim = NULL;
CtrlAnimator *prightmctrlanim = NULL;
STATIC INT CtrlAnimPageCallback(CtrlAnimator *mpAnimCtrl, EAnimEventType eEventType, WPARAM wParam, LPARAM lParam)
{
    //CLog::LogU("[%s:%s] mpAnimCtrl:%p eEventType:%d \n",__FILE__,__FUNCTION__, mpAnimCtrl, eEventType));
    switch(eEventType){
        case ECTRLANIM_EVENT_START:
        break;
        case ECTRLANIM_EVENT_STOP:
        break;
        case ECTRLANIM_EVENT_PAUSE:
        break;
        case ECTRLANIM_EVENT_END:
        break;
        default:
        break;
    }
    return ERR_OK;
}

VOID CtrlanimCtrl::OnPageCreate()
{
    pbottomctrlanim = CAM->CreateCtrlAnimator(mpWindow1, ECTRL_ANIMATOR_MOVE, EEASING_BOUNCE_OUT);
    prightmctrlanim = CAM->CreateCtrlAnimator(mpList1, ECTRL_ANIMATOR_MOVE, EEASING_BOUNCE_OUT);
    prightmctrlanim->SetCtrlAnimatorListener(CtrlAnimPageCallback);
    pbottomctrlanim->SetCtrlAnimatorListener(CtrlAnimPageCallback);
    //pbottomctrlanim->SetCtrlAnimator_Repeat(2);
    //prightmctrlanim->SetCtrlAnimator_Repeat(2);
    pbottomctrlanim->SetCtrlAnimator_PrivParam(CTRLANIM_YRANG, "480,334");
    prightmctrlanim->SetCtrlAnimator_PrivParam(CTRLANIM_XRANG, "800,544");
}

//2. 控件动画启动
VOID CtrlanimCtrl::start_OnClick(InoControl *pControl, WPARAM wParam, LPARAM lParam)
{
    CLog::LogU("[%s:%s] Name:%s IsSelected():%d \n",__FILE__,__FUNCTION__,pControl->GetName().c_str(),pControl->IsSelected());

    if(pControl->IsSelected()){
        pbottomctrlanim->SetCtrlAnimator_Reversed(TRUE);
        prightmctrlanim->SetCtrlAnimator_Reversed(TRUE);
        prightmctrlanim->SetCtrlAnimator_Easing(EEASING_POW_OUT);
        pbottomctrlanim->SetCtrlAnimator_Easing(EEASING_POW_OUT);
        InoPostMessage("hxn_statusbar",INO_USERMSG(1), 0);
    }else{
        prightmctrlanim->SetCtrlAnimator_Easing(EEASING_BOUNCE_OUT);
        pbottomctrlanim->SetCtrlAnimator_Easing(EEASING_BOUNCE_OUT);
        InoPostMessage("hxn_statusbar",INO_USERMSG(1), 1);
    }

    pbottomctrlanim->StartCtrlAnimator();
    prightmctrlanim->StartCtrlAnimator();
}
Copyright © 2021 深圳合一智联科技有限公司 all right reserved,powered by Gitbook最后修改时间: 2022-07-26 00:11:41

results matching ""

    No results matching ""