组装卡片信息
Android
创建配置信息,并设置各种参数。
/**
* 组装卡片配置信息
* @return
*/
private CubeCardConfig assembleCubeCardConfig(){
// 创建卡片配置
CubeCardConfig cardConfig = new CubeCardConfig();
// 后台创建的卡片ID
cardConfig.setTemplateId("hello_cube");
// 卡片版本
cardConfig.setVersion("1.0.0.0");
// 卡片宽度,这里选取屏幕宽度
cardConfig.setWidth(MFSystemInfo.getPortraitScreenWidth());
return cardConfig;
}iOS
创建配置信息,并设置各种参数。
- (void)createCubeConfig {
// 设置卡片参数
CubeCardConfig *cardConfig = [[CubeCardConfig alloc] init];
// 卡片版本
[cardConfig setVersion:@"1.0.0.0"];
// 后台创建的卡片 ID
[cardConfig setTemplteId:@"987654321"];
// 预设宽度
[cardConfig setWidth:MP_Screen_Width];
// 预设高度
[cardConfig setHeight:CGFLOAT_MAX];
}鸿蒙
let cardConfig:CubeCardConfig = CubeCardConfig
.obtain()
//卡片ID
.setTemplateId(this.cardId)
//卡片版本
.setVersion(this.cardVer)
//卡片宽度,这里选取屏幕宽度
.setWidth(CKSystemInfo.getDisplayMetricsWidth())创建卡片
Android
根据组装好的卡片配置信息,请求卡片。卡片引擎会去服务端获取卡片模板信息,可以使用 createCard 方法一次请求一个卡片,也可以使用 createCards 方法一次请求多个卡片。
/**
* 请求卡片信息
* @param cardConfig
*/
private void requestCubeCard(final CubeCardConfig cardConfig){
// 创建卡片信息
CubeService.instance().getEngine().createCard(cardConfig, new CCardCallback() {
@Override
public void onLoaded(final CubeCard cubeCard, CCardType cardType, CubeCardConfig cubeCardConfig, CubeCardResultCode resultCode) {
renderCubeCard(cubeCard,cardType,cubeCardConfig,resultCode);
}
});
}iOS
根据组装好的卡片配置信息请求卡片,卡片引擎会去服务端获取卡片模板信息。可以使用 createCard 方法一次请求一个卡片,也可以使用 createCards 方法一次请求多个卡片。
[[[CubeService sharedInstance] getEngine] createCard:cardConfig callback:self];鸿蒙
根据组装好的卡片配置信息请求卡片,卡片引擎会去服务端获取卡片模板信息。可以使用 createCard 方法一次请求一个卡片,也可以使用 createCards 方法一次请求多个卡片。
CubeEngine.getInstance().createCard(
cardConfig
,
{
onLoaded: (card: CubeCard | null, cardType: CCardType, config: CubeCardConfig, code: CubeCardResultCode) => {
if (CubeCardResultCode.CubeCardResultSucc == code) {
this.instance = card;
}
}
});渲染卡片
Android
获取到卡片信息后,生成卡片 View,在主线程中进行渲染。这一步也要做异常判断,防止未顺利获取到卡片信息的情况发生。
/**
* 渲染卡片
* @param cubeCard
* @param cardType
* @param cubeCardConfig
* @param resultCode
*/
private void renderCubeCard(final CubeCard cubeCard, CCardType cardType, CubeCardConfig cubeCardConfig, CubeCardResultCode resultCode) {
if (resultCode == CubeCardResultCode.CubeCardResultSucc) {
// 需要运行在主线程
runOnUiThread(new Runnable() {
@Override
public void run() {
mCard = cubeCard;
// 创建卡片View
CubeView view = CubeService.instance().getEngine().createView(FastActivity.this);
// 添加到外层 ViewGroup 里
mWrapperLl.addView(view);
// 渲染卡片
cubeCard.renderView(view);
}
});
MPLogger.info(TAG, "succ " + cubeCardConfig.getTemplateId() + " style " + cardType);
} else {
MPLogger.info(TAG, "fail " + cubeCardConfig.getTemplateId() + " style " + cardType + " error " + resultCode);
}
}iOS
拿到卡片信息之后,生成卡片 View,然后在主线程中进行渲染。在此环节中需要进行异常判断,防止未顺利获取到卡片信息的情况发生。
#pragma mark---CrystalCardCallback
- (void)onLoaded:(CubeCard *)card cardType:(CCardType)cardType config:(CubeCardConfig *)config erroCode:(CubeCardResultCode)erroCode {
if (!card) {
NSString *errMsg = [NSString stringWithFormat:@"创建失败:templteId=%@,style=%d, error=%d", [config templteId], cardType, erroCode];
NSLog(@"错误信息:%@", errMsg);
return;
}
NSLog(@"创建成功 succ %@ style %d error %d", [config templteId], cardType, erroCode);
dispatch_async(dispatch_get_main_queue(), ^{
//主线程刷新UI操作
CubeView *view = [[[CubeService sharedInstance] getEngine] createView];
CGSize size = [card getSize];
if (![view isEqual:[NSNull null]]) {
[view setFrame:CGRectMake(0, 0, MP_Screen_Width - 40, size.height)];
[card renderView:view];
}
[self.view addSubView:view];
});
}鸿蒙
build() {
Stack() {
Column() {
···
if (this.instance) {
CubeCardComponent({ instance: this.instance })
}
···
}
.justifyContent(FlexAlign.Start)
}
}通知卡片生命周期
通知 didApear
Android
mCard.notifyState(CCardState.CCardStateAppear);iOS
[card notifyState:CCardStateAppear];鸿蒙
this.instance.notify(CCardState.CCardStateAppear)通知 disApear
Android
mCard.notifyState(CCardState.CCardStateDisappear);iOS
[card notifyState:CCardStateDisappear];鸿蒙
this.instance.notify(CCardState.CCardStateDisappear)通知前台
Android
mCard.notifyState(CCardState.CCardStateForeGround);iOS
[card notifyState:CCardStateForeGround];鸿蒙
this.instance.notify(CCardState.CCardStateForeGround)通知后台
Android
mCard.notifyState(CCardState.CCardStateBackGround);iOS
[card notifyState:CCardStateBackGround];鸿蒙
this.instance.notify(CCardState.CCardStateBackGround)释放卡片
Android
卡片使用完成之后,释放卡片的内存资源,通常是在页面的 onDestroy 生命周期里调用。
/**
* 释放卡片资源
*/
private void releaseCubeCard(){
if (mCard != null) {
mCard.recycle();
}
int chidrenCount = mWrapperLl.getChildCount();
for (int i = 0; i < chidrenCount; i++) {
if (mWrapperLl.getChildAt(i) instanceof CubeView) {
((CubeView) mWrapperLl.getChildAt(i)).destroy();
}
}
mWrapperLl.removeAllViews();
}iOS
卡片使用完成之后,需要释放卡片的内存资源,通常是在页面的 dealloc 生命周期里调用或主动销毁。
- (void)destoryCubeService {
//销毁卡片引擎
if (![[[CubeService sharedInstance] getEngine] isEqual:[NSNull null]]) {
[[CubeService sharedInstance] destroyEngine];
}
//删除卡片视图
[self.view removeAllSubviews];
}鸿蒙
this.instance.destroy();该文章对您有帮助吗?