本地参数保存功能致力于提升用户体验,满足部分客户的要求,如记录用户上次进入实时预览时设置的参数。
该文档仅根据sample示例代码编写,为实现层代码,仅供参考。
从版本V4.4.0开始,sample提供美颜美型保存参数示例。
由于保存参数为实现层逻辑,因此本文档仅对sample中提供的示例代码进行说明。
可参考该示例与项目进行集成。
该部分对iOS sample代码中的保存参数部分代码做出说明。
代码位置在:Effect/Effect/Effect.m中
#define BEGLOBISSAVE 1
参数说明
值为默认为1 ,为1时,开启保存功能; 为0时,关闭保存功能。
代码位置在:Effect/Effect/model/LocalParameterSaving/BESaveLocalParameterManager.m中
+ (NSArray<NSString *> *)be_SaveModelTitles { static dispatch_once_t onceToken; static NSArray *modelTitles; dispatch_once(&onceToken, ^{ modelTitles = @[ @"feature_beauty" ,@"feature_beauty_pro" ,@"feature_style_makeup" ]; }); return modelTitles; }
参数说明
如果某个模块需要开启本地参数保存功能,必须将该模块的title添加到modelTitles这个数组中,如果某模块不需要此功能,将title从这个数组中移除即可。
代码位置在:Effect/Effect/ui/base/vc/BEEffectVC.m中
// {zh} / 获取本地保存的数据 {en} /Get locally saved data // {zh} / @param isFilter 是否要获取滤镜数据 {en} /@param isFilter whether to get filter data - (id)reloadLocalDataISFilter:(BOOL)isFilter
代码位置在:Effect/Effect/ui/base/vc/BEEffectVC.m中
// {zh} / 供子类调用 用于保存本地数据 {en} /For subclasses to call, for saving local data // {zh} / @param data 所需要保存的数据 {en} /@param data The data to be saved // {zh} / @param isFilter 是否是滤镜数据 {en} /@param isFilter is filter data - (void)be_saveLocalParameterWith:(id)data ISFilter:(BOOL)isFilter
代码位置在:Effect/Effect/ui/base/vc/BEEffectVC.m中
// {zh} / 更新本地保存的某个节点的强度值 {en} /Update the strength value of a locally saved node // {zh} / @param item 节点 {en} /@param item node - (void)be_updateNodeIntensityValue:(BEEffectItem *)item
代码位置在:Effect/Effect/ui/base/vc/BEEffectVC.m中
// {zh} / 删除本地保存的参数 {en} /Delete locally saved parameters - (void)be_deleteLocalParameter
以美颜美型模块为例来说明调用以上封装接口的实际实现。
示例代码在sample中的位置:Effect/Effect/ui/effect/vc/BEBeautyEffectVC.m
该部分对安卓sample代码中的保存参数部分代码做出说明。
本地建立sqlite数据库, 美颜美型、美颜美型pro、风格妆各建立一张表。
参数数据存储遵循以下原则:
android端sample每次开启功能(预览开启的初始状态、退后台时的状态保存、返回主页后的状态保存、退出应用的状态保存、进入图片模式再返回的状态保存)会从数据库中加载两次数据,第一次会恢复sdk的特效状态,第二次会从数据中恢复出UI状态。数据库的改变分别发生在项目选中、强度/颜色值改变、重置三个时间点。
BaseEffectActivity初始化阶段恢复sdk的特效状态
开启功能时(预览开启的初始状态、退后台时的状态保存、返回主页后的状态保存、退出应用的状态保存、进入图片模式再返回的状态保存)刷新UI状态
EffectFragment的updateLocalParam方法
StyleMakeupFragment的updateLocalParam方法
EffectFragment类中onFilterSelected、onProgressEnd、onColorSelected、resetToDefault方法;
BeautyFaceFragment类中onItemClick、removeOrAddItem方法;
StyleMakeupFramgent类中onBeautySelect、resetDefault、onProgressEnd方法;
参见以上方法内,LocalParamDataManager.useLocalParamStorage()条件判断下的内容。
存储的数据结构如下:
public class LocalParam{ public String category; //指示素材调用了什么sdk接口来设置效果 public String path; //素材路径 public String key; //key字段 public float intensity; //强度值 public int arg0; //参数0 public long arg1; //参数1 public long arg2; //参数2 public String arg3; //参数3 public boolean selected;//是否被选中 public boolean effect; //是否生效 }
各种类型的素材共用这一种数据结构,不同类型的素材对应于各个字段的含义见于下表
类型 | 字段 | 组合美化 | 滤镜 | 贴纸 | 消息 |
---|---|---|---|---|---|
String | category | "composer_node" | "filter" | "sticker" | "msg" |
String | path | 路径 | 路径 | 路径 | 路径 |
String | key | Key | - | RenderKey | - |
float | intensity | 强度值 | 强度值 | - | - |
int | arg0 | 单/双向调节 | - | - | arg0 |
long | arg1 | 选中颜色序号 | - | - | arg1 |
long | arg2 | - | - | - | arg2 |
String | arg3 | - | - | - | arg3 |
boolean | selected | 是否选中 | 是否选中 | 是否选中 | 是否选中 |
boolean | effect | 是否生效 | 是否生效 | 是否生效 | 是否生效 |