tencent cloud

文档反馈

快速接入 Avatar

最后更新时间:2023-05-18 10:33:12
    由于 Avatar 只是腾讯特效的部分功能,所以在接入时需参考 腾讯特效接入文档,将 SDK 集成到您的项目之中。然后按照下文的方法添加 Avatar UI、加载 Avatar 素材。
    1. 按照腾讯特效文档进行接入,请参见 独立集成腾讯特效
    2. 按照如下方法加载 Avatar 素材。

    使用 Avatar 功能具体步骤

    步骤1:复制 Demo 中的文件

    1. 在官网下载对应的 demo工程,并解压。
    2. 添加 avatar 资源:联系我们进行 Avatar 资源签发,然后将签发的资源复制到工程中(和 Demo 位置保持一致demo/app/assets/MotionRes/avatarRes 下)。由于 Demo 中的 demo/app/assets/MotionRes/avatarRes 下的 avatar 资源是加密授权过的,所以客户无法直接使用。
    3. 复制 Demo 中 com.tencent.demo.avatar 文件夹下的所有类到您的工程中。

    步骤2:添加关键代码

    参考 Demo 中的 com.tencent.demo.avatar.AvatarEditActivity 类,添加如下代码。
    1. 在页面的 xml 文件文件中配置面板信息:
    <com.tencent.demo.avatar.view.AvatarPanel
    android:id="@+id/avatar_panel"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    app:layout_constraintBottom_toBottomOf="parent" />
    2. 在页面中获取面板对象并设置对应的数据回调接口:
    avatarPanel.setAvatarPanelCallBack(new AvatarPanelCallBack() {
    @Override
    public void onReceiverBindData(List<AvatarData> avatarData) {
    mXMagicApi.updateAvatar(avatarData, AvatarEditActivity.this);
    }
    @Override
    public void onItemChecked(MainTab mainTab, AvatarItem avatarItem) {
    if (avatarItem.avatarData == null && URLUtil.isNetworkUrl(avatarItem.downloadUrl)) { //此处表示要进行动态下载
    downloadAvatarData(avatarItem, () -> updateConfig(avatarItem));
    } else {
    updateConfig(avatarItem);
    List<AvatarData> bindAvatarData = AvatarResManager.getAvatarDataByBindData(avatarItem.bindData);
    mXmagicApi.updateAvatar(bindAvatarData, AvatarActivity.this);
    }
    }
    
    @Override
    public void onItemValueChange(AvatarItem avatarItem) {
    updateConfig(avatarItem);
    }
    
    @Override
    public boolean onShowPage(AvatarPageInf avatarPageInf, SubTab subTab) {
    if (subTab != null && subTab.items != null && subTab.items.size() > 0) {
    AvatarItem avatarItem = subTab.items.get(0);
    if (avatarItem.type == AvatarData.TYPE_SLIDER && avatarItem.avatarData == null && URLUtil.isNetworkUrl(avatarItem.downloadUrl)) { //此处表示要进行动态下载
    downloadAvatarData(avatarItem, () -> {
    if (avatarPageInf != null) {
    avatarPageInf.refresh();
    }
    });
    return false;
    }
    }
    return true;
    }
    
    private void updateConfig(AvatarItem avatarItem) {
    if (mXmagicApi != null && avatarItem != null) {
    List<AvatarData> avatarConfigList = new ArrayList<>();
    avatarConfigList.add(avatarItem.avatarData);
    mXmagicApi.updateAvatar(avatarConfigList, AvatarActivity.this);
    }
    }
    });
    3. 获取面板数据,并设置给面板:
    AvatarResManager.getInstance().getAvatarData(avatarResName, getAvatarConfig(), allData -> {
    avatarPanel.initView(allData);
    });
    4. 创建 xmagicApi 对象,并加载捏脸资源:
    protected void initXMagicAndLoadAvatar(String avatarConfig, UpdatePropertyListener updatePropertyListener) {
    if (mXMagicApi == null && !isFinishing() && !isDestroyed()) {
    WorkThread.getInstance().run(() - > {
    synchronized(lock) {
    if (isXMagicApiDestroyed) {
    return;
    }
    mXMagicApi = XmagicApiUtils.createXMagicApi(getApplicationContext(), null);
    AvatarResManager.getInstance().loadAvatarRes(mXMagicApi, avatarResName, avatarConfig == null ? getAvatarConfig() : avatarConfig, updatePropertyListener);
    setAvatarPlaneType();
    }
    }, this.hashCode());
    }
    }
    5. 保存 Avatar 属性,可参考 Demo 中的 saveAvatarConfigs 方法:
    /**
    * 保存用户设置的属性或者默认属性值
    */
    public void onSaveBtnClick() {
    //通过AvatarResManager的getUsedAvatarData获取用户配置的属性
    List < AvatarData > avatarDataList = AvatarResManager.getUsedAvatarData(avatarPanel.getMainTabList());
    //通过XmagicApi.exportAvatar方法将配置的属性转换为字符串
    String content = XmagicApi.exportAvatar(avatarDataList);
    //保存此字符串即可,下载使用时将此字符串设置给SDK的loadAvatarRes方法,即可恢复此形象
    if (mXMagicApi != null) {
    mXMagicApi.exportCurrentTexture(bitmap - > saveAvatarModes(bitmap, content));
    }
    }
    6. 切换背景参考 Demo 中的背景面板:
    
    
    
    7. 设置模型动画参考demo 中的互动页面
    
    
    
    
    
    
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持