赞
踩
XComponent 提供了应用在 native 侧调用 OpenGLES 图形接口的能力,本文主要介绍如何配合 Vsync 事件,完成自定义动画。在这种实现方式下,自定义动画的绘制不在 UI 主线程中完成,即使主线程卡顿,动画效果也不会受影响。
find_library( # Sets the name of the path variable.
libvsync-lib
# Specifies the name of the NDK library that
# you want CMake to locate.
native_vsync )
#include <native_vsync/native_vsync.h>
SyncParam *param = new SyncParam();
param->eglCore = this;
param->window = window;
mVsync = OH_NativeVSync_Create(GAME_SYNC_NAME, 3);
if (!mVsync) {
LOGE("EGLCore:: Create mVsync failed");
return;
}
OH_NativeVSync_RequestFrame( mVsync, [](long long timestamp, void *data) { LOGI("EGLCore::OH_NativeVSync_RequestFrame timestamp = %{public}lld", timestamp); SyncParam *syncParam = (SyncParam *)data; if (syncParam == nullptr) { return; } EGLCore *eglCore = syncParam->eglCore; void *window = syncParam->window; if (eglCore == nullptr || window == nullptr) { return; } eglCore->mEglWindow = static_cast<EGLNativeWindowType>(window); ... eglCore->DrawSquare(); eglCore->switchSpecular(); eglCore->switchAmbient(); }, param );
此处需要注意,frame callback 回调的执行线程不是当前申请 OH_NativeVSync_RequestFrame 的线程,而是 vsync 实例中申请的 eventlooper 线程。所以,egl Window 的初始化也需要放到 callback 中创建。
XcomponentVsync // har类型
|---cpp // native xcomponent配合vsync实现自定义动画
|---pages
| |---XcomponentVsync.ets // Xcomponent 组件加载自定义动画
为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05
https://qr21.cn/FV7h05
https://qr21.cn/FV7h05
https://qr21.cn/FV7h05
https://qr18.cn/F781PH
https://qr18.cn/F781PH
1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。