HarmonyOS NEXT实战开发:NDK属性动画实例

使用属性动画

ArkUI开发框架在NDK接口主要提供属性动画,实现组件出现/消失转场。同时,可以通过Node-API桥接ArkTS侧帧动画能力,实现Native侧的动画效果。

说明

  • 需要从ArkTS侧获取this.getUIContext(),传入到Native侧。

  • 在Native侧通过OH_ArkUI_GetContextFromNapiValue方法获取context。

  • 需要执行的动画属性变化必须写在ArkUI_ContextCallback中callback中。

  • 需要执行的动画属性,必须在执行动画之前设置过。

提供全局animateTo显式动画接口,来指定由于闭包代码导致的状态变化插入过渡动效。同属性动画,布局类改变宽高的动画,内容都是直接到终点状态。

  1. 在.ets文件中获取UIContext,把this.getUIContext()当做参数输出到Native方法中。

    // createNativeNode是Native侧暴露的方法
    nativeNode.createNativeNode("xcomponentId", this.getUIContext());
  2. 解析UIContext转换C中的context对象。

    // 获取ets测传入的context
    ArkUI_ContextHandle context = nullptr;
    // 通过code 判断是否获取成功
    auto code = OH_ArkUI_GetContextFromNapiValue(env, args[1], &context);
  3. 获取ArkUI_NativeAnimateAPI_1 对象。

    // 获取ArkUI_NativeAnimateAPI接口
    ArkUI_NativeAnimateAPI_1 *animateApi = nullptr;
    OH_ArkUI_GetModuleInterface(ARKUI_NATIVE_ANIMATE, ArkUI_NativeAnimateAPI_1, animateApi);
  4. 设置 ArkUI_AnimateOption参数,通过提供的C方法设置对应的参数。

    ArkUI_AnimateOption *option = OH_ArkUI_AnimateOption_Create();
    OH_ArkUI_AnimateOption_SetDuration(option, 2000);
    OH_ArkUI_AnimateOption_SetTempo(option, 1.1);
    OH_ArkUI_AnimateOption_SetCurve(option, ARKUI_CURVE_EASE);
    OH_ArkUI_AnimateOption_SetDelay(option, 20);
    OH_ArkUI_AnimateOption_SetIterations(option, 1);
    OH_ArkUI_AnimateOption_SetPlayMode(option, ARKUI_ANIMATION_PLAY_MODE_REVERSE);
    ArkUI_ExpectedFrameRateRange *range = new ArkUI_ExpectedFrameRateRange;
    range->min = 10;
    range->max = 120;
    range->expected = 60;
    OH_ArkUI_AnimateOption_SetExpectedFrameRateRange(option, range);
  5. 设置回调参数。

    // 用户自定义参数
    struct UserData{
        int32_t data;
    };
    UserData *onFinishUser = new UserData;
    onFinishUser->data= 101;
    // 设置完成的回调
    ArkUI_AnimateCompleteCallback *completeCallback = new ArkUI_AnimateCompleteCallback;
    completeCallback->userData = onFinishUser;
    completeCallback->type = ARKUI_FINISH_CALLBACK_REMOVED;
    completeCallback->callback = [](void *userData) {
        OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "Manager", "CreateNativeNode  onFinishCallback %{public}d",
                     reinterpret_cast<AA *>(userData)->a);
    };
    // 用户自定义参数
    UserData *eventUser = new UserData ;
    eventUser->data= 201;
    static bool isback = true;
    ArkUI_ContextCallback *update = new ArkUI_ContextCallback;
    update->userData = eventUser;
    update->callback = [](void *user) {
        OH_LOG_Print(LOG_APP, LOG_INFO, LOG_PRINT_DOMAIN, "Manager", "CreateNativeNode  animateTo %{public}d",
                     reinterpret_cast<UserData*>(user)->data);
        // 对应的属性变化 width height
        if (isback) {
            ArkUI_NumberValue custom_widthValue[] =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值