#鸿蒙通关秘籍#如何在HarmonyOS NEXT中使用NDK属性动画?

HarmonyOS
19h前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
PaaS碧海潮生

在HarmonyOS NEXT中实现NDK属性动画,可以通过以下步骤操作:

  1. 在ArkTS侧获取UIContext:调用this.getUIContext()并将其传递给Native方法。
    nativeNode.createNativeNode("xcomponentId", this.getUIContext());
    
  2. 在Native侧解析UIContext:借助 OH_ArkUI_GetContextFromNapiValue 函数将传入的context转换为C语言中的context对象。
    ArkUI_ContextHandle context = nullptr;
    auto code = OH_ArkUI_GetContextFromNapiValue(env, args[1], &context);
    
  3. 获取动画API接口:调用OH_ArkUI_GetModuleInterface以获取 ArkUI_NativeAnimateAPI_1 接口。
    ArkUI_NativeAnimateAPI_1 *animateApi = nullptr;
    OH_ArkUI_GetModuleInterface(ARKUI_NATIVE_ANIMATE, ArkUI_NativeAnimateAPI_1, animateApi);
    
  4. 设置动画选项:利用提供的C方法设置 ArkUI_AnimateOption 的相关参数。
    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{10, 120, 60};
    OH_ArkUI_AnimateOption_SetExpectedFrameRateRange(option, range);
    
  5. 设置回调参数:配置动画结束后的回调操作。
    struct UserData { int32_t data; };
    UserData *onFinishUser = new UserData{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<UserData *>(userData)->data);
    };
    
分享
微博
QQ
微信
回复
17h前
相关问题