From 8619d8cd233c66073efd7e59fe8cb340cab02584 Mon Sep 17 00:00:00 2001 From: fengzhongsen Date: Thu, 11 Jun 2026 19:23:04 +0800 Subject: [PATCH] feat(android-demo): improve avatar selector with thumbnails and grouped display - Add AvatarModel data class with structured avatar info (name, description, url, thumbnail) - Redesign ModelSelectorDialog with two sections: Recommended Avatars (grid) and More Models (list) - Add avatar thumbnail images for 4 official avatars (Leo, Oliver, Sofia, Lily) - Remove 7 broken model URLs that return 404 from GitHub releases - Add 4 additional working models from v1.0.0 release (ddzh, shuziren_v2, St_yxm, Zyynv) - Update activity_main.xml to show currently selected avatar name - Update item layout to display avatar thumbnail alongside name and description --- .../ai/guiji/duix/test/model/AvatarModel.kt | 81 ++++++++++++++++++ .../duix/test/ui/activity/MainActivity.kt | 71 ++++++++------- .../test/ui/adapter/ModelSelectorAdapter.kt | 35 ++++++-- .../test/ui/dialog/ModelSelectorDialog.kt | 40 +++++++-- .../main/res/drawable-nodpi/avatar_leo.jpg | Bin 0 -> 10307 bytes .../main/res/drawable-nodpi/avatar_lily.jpg | Bin 0 -> 10807 bytes .../main/res/drawable-nodpi/avatar_oliver.jpg | Bin 0 -> 9406 bytes .../main/res/drawable-nodpi/avatar_sofia.jpg | Bin 0 -> 9900 bytes .../src/main/res/layout/activity_main.xml | 54 +++++++++--- .../main/res/layout/dialog_model_selector.xml | 62 +++++++++++--- .../main/res/layout/item_model_selector.xml | 51 ++++++++--- 11 files changed, 306 insertions(+), 88 deletions(-) create mode 100644 duix-android/dh_aigc_android/test/src/main/java/ai/guiji/duix/test/model/AvatarModel.kt create mode 100644 duix-android/dh_aigc_android/test/src/main/res/drawable-nodpi/avatar_leo.jpg create mode 100644 duix-android/dh_aigc_android/test/src/main/res/drawable-nodpi/avatar_lily.jpg create mode 100644 duix-android/dh_aigc_android/test/src/main/res/drawable-nodpi/avatar_oliver.jpg create mode 100644 duix-android/dh_aigc_android/test/src/main/res/drawable-nodpi/avatar_sofia.jpg diff --git a/duix-android/dh_aigc_android/test/src/main/java/ai/guiji/duix/test/model/AvatarModel.kt b/duix-android/dh_aigc_android/test/src/main/java/ai/guiji/duix/test/model/AvatarModel.kt new file mode 100644 index 00000000..f5d2b696 --- /dev/null +++ b/duix-android/dh_aigc_android/test/src/main/java/ai/guiji/duix/test/model/AvatarModel.kt @@ -0,0 +1,81 @@ +package ai.guiji.duix.test.model + +import ai.guiji.duix.test.R + +/** + * 数字人形象数据模型 + */ +data class AvatarModel( + val name: String, + val description: String, + val url: String, + val avatarResId: Int = 0 // 头像资源 ID,0 表示无头像 +) { + companion object { + /** + * 官方公开的 4 个数字人形象 (v2.0.1) - 推荐使用 + */ + val OFFICIAL_AVATARS = arrayListOf( + AvatarModel( + name = "Leo", + description = "年轻男性 · 休闲风格", + url = "https://github.com/duixcom/Duix.mobile/releases/download/v2.0.1/Leo.zip", + avatarResId = R.drawable.avatar_leo + ), + AvatarModel( + name = "Oliver", + description = "成熟男性 · 商务正装", + url = "https://github.com/duixcom/Duix.mobile/releases/download/v2.0.1/Oliver.zip", + avatarResId = R.drawable.avatar_oliver + ), + AvatarModel( + name = "Sofia", + description = "知性女性 · 白衬衫", + url = "https://github.com/duixcom/Duix.mobile/releases/download/v2.0.1/Sofia.zip", + avatarResId = R.drawable.avatar_sofia + ), + AvatarModel( + name = "Lily", + description = "年轻女性 · 亚洲面孔", + url = "https://github.com/duixcom/Duix.mobile/releases/download/v2.0.1/Lily.zip", + avatarResId = R.drawable.avatar_lily + ) + ) + + /** + * 更多可用模型 (v1.0.0) + */ + val MORE_MODELS = arrayListOf( + AvatarModel( + name = "bendi3", + description = "通用形象", + url = "https://github.com/duixcom/Duix-Mobile/releases/download/v1.0.0/bendi3_20240518.zip" + ), + AvatarModel( + name = "airuike", + description = "通用形象", + url = "https://github.com/duixcom/Duix-Mobile/releases/download/v1.0.0/airuike_20240409.zip" + ), + AvatarModel( + name = "ddzh", + description = "数字人形象", + url = "https://github.com/duixcom/Duix-Mobile/releases/download/v1.0.0/ddzh.zip" + ), + AvatarModel( + name = "shuziren_v2", + description = "数字人 v2", + url = "https://github.com/duixcom/Duix-Mobile/releases/download/v1.0.0/shuziren_v2.zip" + ), + AvatarModel( + name = "St_yxm", + description = "加密优化版", + url = "https://github.com/duixcom/Duix-Mobile/releases/download/v1.0.0/St_yxm_encrypted_optim.zip" + ), + AvatarModel( + name = "Zyynv", + description = "1080p 高清", + url = "https://github.com/duixcom/Duix-Mobile/releases/download/v1.0.0/Zyynv_0515_1080p.zip" + ) + ) + } +} diff --git a/duix-android/dh_aigc_android/test/src/main/java/ai/guiji/duix/test/ui/activity/MainActivity.kt b/duix-android/dh_aigc_android/test/src/main/java/ai/guiji/duix/test/ui/activity/MainActivity.kt index 15b5ef7b..a63dd166 100644 --- a/duix-android/dh_aigc_android/test/src/main/java/ai/guiji/duix/test/ui/activity/MainActivity.kt +++ b/duix-android/dh_aigc_android/test/src/main/java/ai/guiji/duix/test/ui/activity/MainActivity.kt @@ -4,6 +4,7 @@ import ai.guiji.duix.sdk.client.BuildConfig import ai.guiji.duix.sdk.client.VirtualModelUtil import ai.guiji.duix.test.R import ai.guiji.duix.test.databinding.ActivityMainBinding +import ai.guiji.duix.test.model.AvatarModel import ai.guiji.duix.test.ui.dialog.LoadingDialog import ai.guiji.duix.test.ui.dialog.ModelSelectorDialog import android.annotation.SuppressLint @@ -17,21 +18,9 @@ import java.io.File class MainActivity : BaseActivity() { private lateinit var binding: ActivityMainBinding - private var mLoadingDialog: LoadingDialog?=null + private var mLoadingDialog: LoadingDialog? = null private var mLastProgress = 0 - val models = arrayListOf( - "https://github.com/duixcom/Duix-Mobile/releases/download/v1.0.0/bendi3_20240518.zip", - "https://github.com/duixcom/Duix-Mobile/releases/download/v1.0.0/airuike_20240409.zip", - "https://github.com/duixcom/Duix-Mobile/releases/download/v1.0.0/675429759852613_7f8d9388a4213080b1820b83dd057cfb_optim_m80.zip", - "https://github.com/duixcom/Duix-Mobile/releases/download/v1.0.0/674402003804229_f6e86fb375c4f1f1b82b24f7ee4e7cb4_optim_m80.zip", - "https://github.com/duixcom/Duix-Mobile/releases/download/v1.0.0/674400178376773_3925e756433c5a9caa9b9d54147ae4ab_optim_m80.zip", - "https://github.com/duixcom/Duix-Mobile/releases/download/v1.0.0/674397294927941_6e297e18a4bdbe35c07a6ae48a1f021f_optim_m80.zip", - "https://github.com/duixcom/Duix-Mobile/releases/download/v1.0.0/674393494597701_f49fcf68f5afdb241d516db8a7d88a7b_optim_m80.zip", - "https://github.com/duixcom/Duix-Mobile/releases/download/v1.0.0/651705983152197_ccf3256b2449c76e77f94276dffcb293_optim_m80.zip", - "https://github.com/duixcom/Duix-Mobile/releases/download/v1.0.0/627306542239813_1871244b5e6912efc636ba31ea4c5c6d_optim_m80.zip", - ) - private var mBaseConfigUrl = "" private var mModelUrl = "" @@ -43,13 +32,23 @@ class MainActivity : BaseActivity() { binding.tvSdkVersion.text = "SDK Version: ${BuildConfig.VERSION_NAME}" + // 默认选中第一个官方形象 + val defaultAvatar = AvatarModel.OFFICIAL_AVATARS[0] + binding.etUrl.setText(defaultAvatar.url) + binding.tvSelectedAvatar.text = "当前形象: ${defaultAvatar.name} (${defaultAvatar.description})" binding.btnMoreModel.setOnClickListener { - val modelSelectorDialog = ModelSelectorDialog(mContext, models, object : ModelSelectorDialog.Listener{ - override fun onSelect(url: String) { - binding.etUrl.setText(url) + val modelSelectorDialog = ModelSelectorDialog( + mContext, + AvatarModel.OFFICIAL_AVATARS, + AvatarModel.MORE_MODELS, + object : ModelSelectorDialog.Listener { + override fun onSelect(avatar: AvatarModel) { + binding.etUrl.setText(avatar.url) + binding.tvSelectedAvatar.text = "当前形象: ${avatar.name} (${avatar.description})" + } } - }) + ) modelSelectorDialog.show() } binding.btnPlay.setOnClickListener { @@ -57,37 +56,37 @@ class MainActivity : BaseActivity() { } } - private fun play(){ + private fun play() { mBaseConfigUrl = binding.etBaseConfig.text.toString() mModelUrl = binding.etUrl.text.toString() - if (TextUtils.isEmpty(mBaseConfigUrl)){ + if (TextUtils.isEmpty(mBaseConfigUrl)) { Toast.makeText(mContext, R.string.base_config_cannot_be_empty, Toast.LENGTH_SHORT).show() return } - if (TextUtils.isEmpty(mModelUrl)){ + if (TextUtils.isEmpty(mModelUrl)) { Toast.makeText(mContext, R.string.model_url_cannot_be_empty, Toast.LENGTH_SHORT).show() return } checkBaseConfig() } - private fun checkBaseConfig(){ - if (VirtualModelUtil.checkBaseConfig(mContext)){ + private fun checkBaseConfig() { + if (VirtualModelUtil.checkBaseConfig(mContext)) { checkModel() } else { baseConfigDownload() } } - private fun checkModel(){ - if (VirtualModelUtil.checkModel(mContext, mModelUrl)){ + private fun checkModel() { + if (VirtualModelUtil.checkModel(mContext, mModelUrl)) { jumpPlayPage() } else { modelDownload() } } - private fun jumpPlayPage(){ + private fun jumpPlayPage() { val intent = Intent(mContext, CallActivity::class.java) intent.putExtra("modelUrl", mModelUrl) val debug = binding.switchDebug.isChecked @@ -95,7 +94,7 @@ class MainActivity : BaseActivity() { startActivity(intent) } - private fun baseConfigDownload(){ + private fun baseConfigDownload() { mLoadingDialog?.dismiss() mLoadingDialog = LoadingDialog(mContext, "Start downloading") mLoadingDialog?.show() @@ -103,10 +102,10 @@ class MainActivity : BaseActivity() { VirtualModelUtil.ModelDownloadCallback { override fun onDownloadProgress(url: String?, current: Long, total: Long) { val progress = (current * 100 / total).toInt() - if (progress != mLastProgress){ + if (progress != mLastProgress) { mLastProgress = progress runOnUiThread { - if (mLoadingDialog?.isShowing == true){ + if (mLoadingDialog?.isShowing == true) { mLoadingDialog?.setContent("Config download(${progress}%)") } } @@ -115,10 +114,10 @@ class MainActivity : BaseActivity() { override fun onUnzipProgress(url: String?, current: Long, total: Long) { val progress = (current * 100 / total).toInt() - if (progress != mLastProgress){ + if (progress != mLastProgress) { mLastProgress = progress runOnUiThread { - if (mLoadingDialog?.isShowing == true){ + if (mLoadingDialog?.isShowing == true) { mLoadingDialog?.setContent("Config unzip(${progress}%)") } } @@ -142,21 +141,21 @@ class MainActivity : BaseActivity() { }) } - private fun modelDownload(){ + private fun modelDownload() { mLoadingDialog?.dismiss() mLoadingDialog = LoadingDialog(mContext, "Start downloading") mLoadingDialog?.show() - VirtualModelUtil.modelDownload(mContext, mModelUrl, object : VirtualModelUtil.ModelDownloadCallback{ + VirtualModelUtil.modelDownload(mContext, mModelUrl, object : VirtualModelUtil.ModelDownloadCallback { override fun onDownloadProgress( url: String?, current: Long, total: Long, ) { val progress = (current * 100 / total).toInt() - if (progress != mLastProgress){ + if (progress != mLastProgress) { mLastProgress = progress runOnUiThread { - if (mLoadingDialog?.isShowing == true){ + if (mLoadingDialog?.isShowing == true) { mLoadingDialog?.setContent("Model download(${progress}%)") } } @@ -169,10 +168,10 @@ class MainActivity : BaseActivity() { total: Long, ) { val progress = (current * 100 / total).toInt() - if (progress != mLastProgress){ + if (progress != mLastProgress) { mLastProgress = progress runOnUiThread { - if (mLoadingDialog?.isShowing == true){ + if (mLoadingDialog?.isShowing == true) { mLoadingDialog?.setContent("Model unzip(${progress}%)") } } diff --git a/duix-android/dh_aigc_android/test/src/main/java/ai/guiji/duix/test/ui/adapter/ModelSelectorAdapter.kt b/duix-android/dh_aigc_android/test/src/main/java/ai/guiji/duix/test/ui/adapter/ModelSelectorAdapter.kt index 288d7d31..cf3776be 100644 --- a/duix-android/dh_aigc_android/test/src/main/java/ai/guiji/duix/test/ui/adapter/ModelSelectorAdapter.kt +++ b/duix-android/dh_aigc_android/test/src/main/java/ai/guiji/duix/test/ui/adapter/ModelSelectorAdapter.kt @@ -1,17 +1,21 @@ package ai.guiji.duix.test.ui.adapter import ai.guiji.duix.test.databinding.ItemModelSelectorBinding +import ai.guiji.duix.test.model.AvatarModel import android.annotation.SuppressLint import android.view.LayoutInflater +import android.view.View import android.view.ViewGroup import androidx.recyclerview.widget.RecyclerView class ModelSelectorAdapter( - private val mList: ArrayList, + private val mList: ArrayList, private val callback: Callback ) : RecyclerView.Adapter() { + private var selectedPosition = -1 + class ItemHolder(val itemBinding: ItemModelSelectorBinding) : RecyclerView.ViewHolder(itemBinding.root) @@ -23,9 +27,28 @@ class ModelSelectorAdapter( @SuppressLint("SetTextI18n") override fun onBindViewHolder(holder: ItemHolder, position: Int) { - holder.itemBinding.tvModelUrl.text = mList[position] - holder.itemBinding.tvModelUrl.setOnClickListener { - callback.onClick(mList[position]) + val avatar = mList[position] + holder.itemBinding.tvModelName.text = avatar.name + holder.itemBinding.tvModelDesc.text = avatar.description + + // 显示头像(如果有) + if (avatar.avatarResId != 0) { + holder.itemBinding.ivAvatar.visibility = View.VISIBLE + holder.itemBinding.ivAvatar.setImageResource(avatar.avatarResId) + } else { + holder.itemBinding.ivAvatar.visibility = View.GONE + } + + // 高亮选中项 + val isSelected = position == selectedPosition + holder.itemBinding.root.alpha = if (isSelected) 1.0f else 0.85f + + holder.itemBinding.root.setOnClickListener { + val oldPos = selectedPosition + selectedPosition = holder.adapterPosition + if (oldPos >= 0) notifyItemChanged(oldPos) + notifyItemChanged(selectedPosition) + callback.onClick(avatar) } } @@ -34,6 +57,6 @@ class ModelSelectorAdapter( } interface Callback { - fun onClick(url: String) + fun onClick(avatar: AvatarModel) } -} \ No newline at end of file +} diff --git a/duix-android/dh_aigc_android/test/src/main/java/ai/guiji/duix/test/ui/dialog/ModelSelectorDialog.kt b/duix-android/dh_aigc_android/test/src/main/java/ai/guiji/duix/test/ui/dialog/ModelSelectorDialog.kt index 42a306b2..243eefb1 100644 --- a/duix-android/dh_aigc_android/test/src/main/java/ai/guiji/duix/test/ui/dialog/ModelSelectorDialog.kt +++ b/duix-android/dh_aigc_android/test/src/main/java/ai/guiji/duix/test/ui/dialog/ModelSelectorDialog.kt @@ -2,18 +2,24 @@ package ai.guiji.duix.test.ui.dialog import ai.guiji.duix.test.R import ai.guiji.duix.test.databinding.DialogModelSelectorBinding +import ai.guiji.duix.test.model.AvatarModel import ai.guiji.duix.test.ui.adapter.ModelSelectorAdapter import android.app.Dialog import android.content.Context import android.os.Bundle +import android.view.ViewGroup import android.view.Window +import android.view.WindowManager -class ModelSelectorDialog(mContext: Context, val models: ArrayList, private val listener: Listener) : - Dialog(mContext, R.style.dialog_center) { +class ModelSelectorDialog( + mContext: Context, + private val officialModels: ArrayList, + private val moreModels: ArrayList, + private val listener: Listener +) : Dialog(mContext, R.style.dialog_center) { private lateinit var binding: DialogModelSelectorBinding - private var mAdapter: ModelSelectorAdapter?=null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -21,19 +27,35 @@ class ModelSelectorDialog(mContext: Context, val models: ArrayList, priv binding = DialogModelSelectorBinding.inflate(layoutInflater) super.setContentView(binding.root) - mAdapter = ModelSelectorAdapter(models, object : ModelSelectorAdapter.Callback{ - override fun onClick(url: String) { + // 设置 Dialog 宽度为屏幕 90% + window?.setLayout( + (context.resources.displayMetrics.widthPixels * 0.9).toInt(), + WindowManager.LayoutParams.WRAP_CONTENT + ) + + // 推荐形象 - 网格布局 + val officialAdapter = ModelSelectorAdapter(officialModels, object : ModelSelectorAdapter.Callback { + override fun onClick(avatar: AvatarModel) { + dismiss() + listener.onSelect(avatar) + } + }) + binding.rvOfficialModels.adapter = officialAdapter + + // 更多模型 - 列表布局 + val moreAdapter = ModelSelectorAdapter(moreModels, object : ModelSelectorAdapter.Callback { + override fun onClick(avatar: AvatarModel) { dismiss() - listener.onSelect(url) + listener.onSelect(avatar) } }) - binding.rvModels.adapter = mAdapter + binding.rvLegacyModels.adapter = moreAdapter setCancelable(true) setCanceledOnTouchOutside(true) } interface Listener { - fun onSelect(url: String) + fun onSelect(avatar: AvatarModel) } -} \ No newline at end of file +} diff --git a/duix-android/dh_aigc_android/test/src/main/res/drawable-nodpi/avatar_leo.jpg b/duix-android/dh_aigc_android/test/src/main/res/drawable-nodpi/avatar_leo.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9b3545969890a8b09e5c2506781af721a75f9c6f GIT binary patch literal 10307 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 Gh5rItBRezz literal 0 HcmV?d00001 diff --git a/duix-android/dh_aigc_android/test/src/main/res/drawable-nodpi/avatar_lily.jpg b/duix-android/dh_aigc_android/test/src/main/res/drawable-nodpi/avatar_lily.jpg new file mode 100644 index 0000000000000000000000000000000000000000..abccef1ac3704f65213712eb4409a282d497e52f GIT binary patch literal 10807 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 F=@U&f|)vO5hWRXl^xCHUkX%(7{iJN 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 RLKsxL`SKUI99D>${V(yR2a*5) literal 0 HcmV?d00001 diff --git a/duix-android/dh_aigc_android/test/src/main/res/layout/activity_main.xml b/duix-android/dh_aigc_android/test/src/main/res/layout/activity_main.xml index 99044d79..1ad885a8 100644 --- a/duix-android/dh_aigc_android/test/src/main/res/layout/activity_main.xml +++ b/duix-android/dh_aigc_android/test/src/main/res/layout/activity_main.xml @@ -8,7 +8,7 @@ + + + + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toBottomOf="@+id/tvAvatarLabel" />