Avatarクイックアクセス
AvatarはTencent Effectの機能の一部であるため、接続の際はEffectのアクセスドキュメントを参照した上でAvatar素材をロードする必要があります。Effectを接続済みの場合は、下記のステップ1の内容を無視してください。
1. Tencent Effectのドキュメントに従って接続します。Tencent Effectの独立した統合をご参照ください。
2. 次の方法に従ってAvatar素材をロードします。
Avatar機能を使用するための具体的な手順
ステップ1:Demo内のファイルのコピー
1. 対応するdemoプロジェクトを公式サイトからダウンロードし、解凍します。
2. Demo内の
demo/app/assets/MotionRes/avatarRes
フォルダをご自身のプロジェクトにコピーします(Demoと同じ位置にします)。3. Demo内の
com.tencent.demo.avatar
フォルダ下のすべてのクラスをプロジェクトにコピーします。ステップ2:重要コードの追加
Demo内の
com.tencent.demo.avatar.AvatarActivity
クラスを参照し、次のコードを追加します1. ページのxmlファイル内でパネル情報を設定します。
<com.tencent.demo.avatar.view.AvatarPanelandroid:id="@+id/avatar_panel"android:layout_width="match_parent"android:layout_height="300dp"app:layout_constraintBottom_toBottomOf="parent" />
2. ページ内でパネルオブジェクトを取得し、対応するデータコールバックインターフェースを設定します。
avatarPanel.setAvatarPanelCallBack(new AvatarPanelCallBack() {@Overridepublic 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);}}@Overridepublic void onItemValueChange(AvatarItem avatarItem) {updateConfig(avatarItem);}@Overridepublic 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オブジェクトを作成し、アバター制作リソースをロードします。
private void initXMagic() {if (mXmagicApi == null) {mXmagicApi = XmagicApiUtils.createXmagicApi(getApplicationContext(), null);AvatarResManager.getInstance().loadAvatarRes(mXmagicApi, avatarResName, getAvatarConfig());setCloseEye(true);//顔が検出されない場合は、スリープ/休止状態になりますsetAvatarPlaneType();} else {mXmagicApi.onResume();}}
5. Avatar属性を保存します。Demo内のsaveAvatarConfigsメソッドを参照できます。
/*** ユーザーの設定した属性またはデフォルトの属性値を保存します*/private void saveAvatarConfigs() {if (mXmagicApi != null && avatarPanel != null) {List<AvatarData> avatarDataList = AvatarResManager.getUsedAvatarData(avatarPanel.getMainTabList());new Thread(() -> {String content = XmagicApi.exportAvatarConfig(avatarDataList);boolean result = FileUtil.writeContentToFile(AvatarResManager.getAvatarConfigsDir(), AvatarResManager.getAvatarConfigsFileName(avatarResName), content);String tip = result ? "save avatar data successfully " : "Save avatar data failed";runOnUiThread(() -> Toast.makeText(getApplicationContext(), tip, Toast.LENGTH_LONG).show());}).start();}}
6. 背景の切り替えはDemo内のchangeAvatarBgTypeメソッドを参照します。
/*** 背景の切り替え*/private void changeAvatarBgType() {if (currentAvatarType == AvatarResManager.AvatarType.VIRTUAL_BG) {currentAvatarType = AvatarResManager.AvatarType.REAL_BG;} else {currentAvatarType = AvatarResManager.AvatarType.VIRTUAL_BG;}saveCurrentAvatarType();setAvatarPlaneType();}/*** モデル背景タイプの設定*/private void setAvatarPlaneType() {AvatarData avatarData = AvatarResManager.getInstance().getAvatarPlaneTypeConfig(avatarResName, currentAvatarType);if (mXmagicApi != null && avatarData != null) {List<AvatarData> avatarDataList = new ArrayList<>();avatarDataList.add(avatarData);mXmagicApi.updateAvatar(avatarDataList, this);}}