Avatar 통합
Avatar는 Tencent Effect SDK의 기능입니다. 사용하기 위해서는 먼저 SDK 연동 후 Avatar 소재를 추가해야 합니다. SDK를 이미 통합한 경우 첫 번째 단계를 건너뜁니다.
1. SDK를 통합합니다. 자세한 지침은 Tencent Effect SDK 통합하기를 참고하십시오.
2. 아래 순서에 따라 Avatar 소재를 로딩합니다.
Avatar 기능 단계
1단계: Demo 파일 복사
1. 당사 웹사이트에서 demo 프로젝트를 다운로드하고 압축을 해제합니다.
2. Demo의
demo/app/assets/MotionRes/avatarRes
폴더를 프로젝트의 동일한 위치에 복사합니다.3. Demo의
com.tencent.demo.avatar
폴더에 있는 모든 클래스를 프로젝트에 복사합니다.2단계: 코드 추가
다음 코드를 추가합니다(Demo의
com.tencent.demo.avatar.AvatarActivity
클래스 참고)1. UI의 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. UI에서 패널 객체를 가져오고 콜백을 구성합니다.
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);}}