feat: 補充卡片背景,補充 VIP 資源播放 MP4 的功能

This commit is contained in:
eggmanQQQ
2024-08-27 16:31:44 +08:00
parent 5f8a8113c6
commit 81a5c6ba65
16 changed files with 128 additions and 43 deletions

View File

@@ -11,7 +11,14 @@ import com.chwl.app.databinding.ItemMyUserCardWearBinding;
import com.chwl.app.ui.utils.ImageLoadUtils;
import com.chwl.core.decoration.headwear.bean.HeadWearInfo;
import com.chwl.core.decoration.headwear.bean.UserCardWearInfo;
import com.chwl.library.download.DownloadManager;
import com.chwl.library.download.DownloadRequest;
import com.chwl.library.download.DownloadTask;
import com.chwl.library.download.FileDownloadListener;
import com.chwl.library.utils.ResUtil;
import com.chwl.library.utils.PathHelper;
import java.io.File;
/**
* Created by huangmeng1 on 2018/5/11.
@@ -28,6 +35,19 @@ public class MyUserCardWearAdapter extends BaseAdapter<UserCardWearInfo> {
super.convert(helper, item);
ItemMyUserCardWearBinding binding = (ItemMyUserCardWearBinding) helper.getBinding();
ImageLoadUtils.loadImage(mContext, item.getPic(), binding.ivUserCardWear);
String filePath = PathHelper.INSTANCE.generateResourcesFilePath(item.getPic());
DownloadRequest request = DownloadRequest.Companion.build(item.getPic(), filePath, "gift_effect_download", null, 60000L);
DownloadManager.INSTANCE.download(request, new FileDownloadListener() {
@Override
public void onDownloadCompleted(@NonNull DownloadTask task) {
String path = task.getRequest().getPath();
binding.ivUserCardWearMp4.startPlay(new File(path));
}
});
helper.addOnClickListener(R.id.tv_used);
if (item.getLabelType() == HeadWearInfo.LABEL_TYPE_NORMAL) {

View File

@@ -32,6 +32,7 @@ import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.chwl.app.utils.AvatarHelper;
import com.chwl.core.vip.bean.UserVipInfo;
import com.chwl.library.download.DownloadException;
import com.chwl.library.download.DownloadManager;
import com.chwl.library.download.DownloadRequest;
@@ -595,10 +596,11 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
//资料卡装扮
if (!TextUtils.isEmpty(userInfo.getUserInfoCardPic())) {
// drawVAPEffect(userInfo.getUserInfoCardPic());
drawVAPEffect("https://image.pekolive.com/v7.mp4");
drawVAPEffect(userInfo.getUserInfoCardPic());
// drawVAPEffect("https://image.pekolive.com/v7.mp4");
} else {
ivUserCardWear.setImageDrawable(null);
ivUserCardWearMP4.setVisibility(View.GONE);
}
if (null != findHimView) {
@@ -747,7 +749,8 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
private void updateNobleView() {
// 防止访问数据库和网络同时刷新出现图标跳动
NobleInfo nobleInfo = userInfo.getNobleInfo();
// NobleInfo nobleInfo = userInfo.getNobleInfo();
UserVipInfo vipInfo = userInfo.getUserVipInfoVO();
HeadWearInfo userHeadwear = userInfo.getUserHeadwear();
boolean havaHead = false;
// 设置普通人
@@ -758,31 +761,46 @@ public class UserInfoDialog extends AppCompatDialog implements View.OnClickListe
AvatarHelper.loadAvatarFrame(ivAvatarHeadWear, avatarFrame, userHeadwear.getType());
}
}
if (nobleInfo == null || TextUtils.isEmpty(nobleInfo.getCardBg())) {
//如果没贵族信息,就加载头像作为背景
if (vipInfo != null) {
// findViewById(R.id.transition_mask).setVisibility(View.GONE);
// ivAvatarBg.setImageResource(R.drawable.user_card_bg_vip_9);
int lv = vipInfo.getVipLevel();
String resourceName = "user_card_bg_vip_" + lv;
int resourceId = context.getResources().getIdentifier(resourceName, "drawable", context.getPackageName());
if (resourceId != 0) {
ivAvatarBg.setImageResource(resourceId);
}
} else {
if (avatarBg == null || !avatarBg.equals(userInfo.getAvatar())) {
avatarBg = userInfo.getAvatar();
ImageLoadUtils.loadImageWithBlur(context, userInfo.getAvatar(), ivAvatarBg, 10, 1);
}
return;
}
// 卡片背景
if (!TextUtils.isEmpty(nobleInfo.getCardBg()) && !topBg.equals(nobleInfo.getCardBg())) {
topBg = nobleInfo.getCardBg();
NobleUtil.loadResource(nobleInfo.getCardBg(), ivAvatarBg, R.drawable.bg_user_info_dialog_top);
}
if (!TextUtils.isEmpty(nobleInfo.getHeadWear())) {
// 头饰
if (!havaHead) {
NobleUtil.loadResource(nobleInfo.getHeadWear(), ivAvatarHeadWear);
}
}
if (!TextUtils.isEmpty(nobleInfo.getBadge())) {
// 勋章
ivBadge.setVisibility(View.VISIBLE);
NobleUtil.loadResource(nobleInfo.getBadge(), ivBadge);
}
// if (nobleInfo == null || TextUtils.isEmpty(nobleInfo.getCardBg())) {
// //如果没贵族信息,就加载头像作为背景
// if (avatarBg == null || !avatarBg.equals(userInfo.getAvatar())) {
// avatarBg = userInfo.getAvatar();
// ImageLoadUtils.loadImageWithBlur(context, userInfo.getAvatar(), ivAvatarBg, 10, 1);
// }
// return;
// }
// // 卡片背景
// if (!TextUtils.isEmpty(nobleInfo.getCardBg()) && !topBg.equals(nobleInfo.getCardBg())) {
// topBg = nobleInfo.getCardBg();
// NobleUtil.loadResource(nobleInfo.getCardBg(), ivAvatarBg, R.drawable.bg_user_info_dialog_top);
// }
// if (!TextUtils.isEmpty(nobleInfo.getHeadWear())) {
// // 头饰
// if (!havaHead) {
// NobleUtil.loadResource(nobleInfo.getHeadWear(), ivAvatarHeadWear);
// }
// }
// if (!TextUtils.isEmpty(nobleInfo.getBadge())) {
// // 勋章
// ivBadge.setVisibility(View.VISIBLE);
// NobleUtil.loadResource(nobleInfo.getBadge(), ivBadge);
// }
}

View File

@@ -221,12 +221,13 @@ class VipCenterActivity : BaseViewBindingActivity<ActivityVipCenterBinding>(),
vipViewModel.myVipInfoLiveData.observe(this) {
it?.let {
banner.setCurrentItem(it.currLevel - 1)
val adapter = vipViewModel.vipInfosLiveData.value?.let { it1 ->
VipCenterBannerAdapter(this,
it1, it)
}
banner.setAdapter(adapter, false)
banner.setCurrentItem(it.currLevel - 1)
//TODO 处理有 VIP 的情况banner 要跳转到对应 index
// bannerView.visibility = View.VISIBLE
// bannerView.post {

View File

@@ -12,6 +12,14 @@ import com.chwl.app.base.BaseDialogFragment
import com.chwl.app.databinding.DialogVipUpgradeBinding
import com.chwl.app.vip.VipViewModel
import com.chwl.core.vip.bean.VipInfo
import com.chwl.library.download.DownloadException
import com.chwl.library.download.DownloadManager.download
import com.chwl.library.download.DownloadRequest
import com.chwl.library.download.DownloadRequest.Companion
import com.chwl.library.download.DownloadTask
import com.chwl.library.download.FileDownloadListener
import com.chwl.library.utils.PathHelper.generateResourcesFilePath
import java.io.File
import java.net.MalformedURLException
import java.net.URL
@@ -53,23 +61,37 @@ class VipUpgradeDialog : BaseDialogFragment<DialogVipUpgradeBinding>() {
}
binding?.tvVipUplevel?.setOnClickListener { dismissAllowingStateLoss() }
binding?.tvVipOrigin?.setOnClickListener { vm.saveOriginDisguise() }
try {
SVGAParser.shareParser()
.decodeFromURL(URL(vipInfo.vipLogo), object : SVGAParser.ParseCompletion {
override fun onComplete(videoItem: SVGAVideoEntity) {
val drawable = SVGADrawable(videoItem)
if (isViewLoaded) {
_binding?.ivVipIcon?.setImageDrawable(drawable)
_binding?.ivVipIcon?.startAnimation()
}
}
override fun onError() {
}
})
} catch (e: MalformedURLException) {
val filePath = generateResourcesFilePath(vipInfo.vipLogo)
val request = DownloadRequest.build(vipInfo.vipLogo, filePath, "gift_effect_download", null, 60000L)
download(request, object : FileDownloadListener() {
override fun onDownloadCompleted(task: DownloadTask) {
val path = task.getRequest().getPath()
binding?.ivVipIconMp4?.startPlay(File(path))
}
}
override fun onDownloadError(exception: DownloadException) {
exception.printStackTrace()
}
})
// try {
// SVGAParser.shareParser()
// .decodeFromURL(URL(vipInfo.vipLogo), object : SVGAParser.ParseCompletion {
// override fun onComplete(videoItem: SVGAVideoEntity) {
// val drawable = SVGADrawable(videoItem)
// if (isViewLoaded) {
// _binding?.ivVipIcon?.setImageDrawable(drawable)
// _binding?.ivVipIcon?.startAnimation()
// }
// }
//
// override fun onError() {
// }
// })
// } catch (e: MalformedURLException) {
//
// }
binding?.tvLevelDesc?.text = getString(R.string.level_up_wear_dress_tips_format).format(vipInfo.vipName)
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@@ -35,14 +35,15 @@
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/iv_avatar_bg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:layout_height="wrap_content"
android:scaleType="fitXY"
android:src="@drawable/default_banner"
app:riv_corner_radius_top_left="@dimen/dp_10"
app:riv_corner_radius_top_right="@dimen/dp_10"
tools:contentDescription="@string/layout_dialog_user_info_02" />
<com.coorchice.library.SuperTextView
android:id="@+id/transition_mask"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:corner="@dimen/dp_10"

View File

@@ -29,8 +29,16 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.opensource.svgaplayer.SVGAImageView
android:id="@+id/iv_vip_icon"
<!-- <com.opensource.svgaplayer.SVGAImageView-->
<!-- android:id="@+id/iv_vip_icon"-->
<!-- android:layout_width="182dp"-->
<!-- android:layout_height="109dp"-->
<!-- app:layout_constraintEnd_toEndOf="parent"-->
<!-- app:layout_constraintStart_toStartOf="parent"-->
<!-- app:layout_constraintTop_toBottomOf="@id/tv_title" />-->
<com.tencent.qgame.animplayer.AnimView
android:id="@+id/iv_vip_icon_mp4"
android:layout_width="182dp"
android:layout_height="109dp"
app:layout_constraintEnd_toEndOf="parent"

View File

@@ -130,6 +130,21 @@
app:layout_constraintTop_toBottomOf="@id/tv_name"
tools:src="@drawable/bg_user_card_wear" />
<com.tencent.qgame.animplayer.AnimView
android:id="@+id/iv_user_card_wear_mp4"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="25dp"
android:layout_marginTop="12dp"
android:layout_marginEnd="25dp"
android:layout_marginBottom="4dp"
android:adjustViewBounds="true"
android:scaleType="fitXY"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="660:360"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_name"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>