From fe04012057d024770e0180543483d393281a542f Mon Sep 17 00:00:00 2001 From: zhujie <leon.zhu@cloudroam.com.cn> Date: 星期四, 03 四月 2025 09:18:16 +0800 Subject: [PATCH] Merge branch 'master' of http://47.96.225.205:8888/r/FirstApp2 --- app/src/main/java/com/example/firstapp/ui/vip/MemberInfoCardFragment.kt | 162 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 162 insertions(+), 0 deletions(-) diff --git a/app/src/main/java/com/example/firstapp/ui/vip/MemberInfoCardFragment.kt b/app/src/main/java/com/example/firstapp/ui/vip/MemberInfoCardFragment.kt new file mode 100644 index 0000000..0d3247e --- /dev/null +++ b/app/src/main/java/com/example/firstapp/ui/vip/MemberInfoCardFragment.kt @@ -0,0 +1,162 @@ +package com.example.firstapp.ui.vip + +import android.graphics.Color +import android.graphics.drawable.Drawable +import androidx.fragment.app.viewModels +import android.os.Bundle +import android.util.Log +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.lifecycle.lifecycleScope +import com.bumptech.glide.Glide +import com.bumptech.glide.load.engine.GlideException +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import com.bumptech.glide.request.RequestListener +import com.bumptech.glide.request.target.Target +import com.bumptech.glide.load.DataSource +import com.example.firstapp.R + +import com.example.firstapp.databinding.FragmentMemberInfoCardBinding +import kotlinx.coroutines.launch + +class MemberInfoCardFragment : Fragment() { + + + companion object { + fun newInstance() = MemberInfoCardFragment() + } + + val viewModel: MemberInfoCardViewModel by viewModels() + + // 绑定变量 + private var _binding: FragmentMemberInfoCardBinding? = null + private val binding get() = _binding!! + + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + } + + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + // 使用 DataBindingUtil.inflate 来绑定布局 + _binding = FragmentMemberInfoCardBinding.inflate(inflater, container, false) + binding.viewModel = viewModel + binding.lifecycleOwner = this + + // 绑定头像 + + Glide.with(this) + .load(viewModel.cover) + .transform(RoundedCorners(100)) // 设置圆角 +// .error(R.drawable.error_placeholder) // 如果加载失败,显示占位图 + .error(R.mipmap.avatar_default) + .listener(object : RequestListener<Drawable> { + override fun onResourceReady( + resource: Drawable?, + model: Any?, + target: Target<Drawable>?, // 正确使用 Target 作为泛型参数 + dataSource: DataSource?, // 导入正确的 DataSource + isFirstResource: Boolean + ): Boolean { + Log.d("Glide", "Image loaded successfully") + return false + } + + override fun onLoadFailed( + e: GlideException?, + model: Any?, + target: Target<Drawable>?, // 正确使用 Target 作为泛型参数 + isFirstResource: Boolean + ): Boolean { + Log.e("Glide", "Image load failed", e) + return false + } + }) + .into(binding.memberAvatarView) + + + // 绑定会员徽章 + + Glide.with(this) + .load(viewModel.vipCover) + .transform(RoundedCorners(100)) // 设置圆角 +// .error(R.drawable.error_placeholder) // 如果加载失败,显示占位图 + .error(R.mipmap.vip_no) + .listener(object : RequestListener<Drawable> { + override fun onResourceReady( + resource: Drawable?, + model: Any?, + target: Target<Drawable>?, // 正确使用 Target 作为泛型参数 + dataSource: DataSource?, // 导入正确的 DataSource + isFirstResource: Boolean + ): Boolean { + Log.d("Glide", "Image loaded successfully") + return false + } + + override fun onLoadFailed( + e: GlideException?, + model: Any?, + target: Target<Drawable>?, // 正确使用 Target 作为泛型参数 + isFirstResource: Boolean + ): Boolean { + Log.e("Glide", "Image load failed", e) + return false + } + }) + .into(binding.memberImageView) + + + // 监听 cover 变化 + viewLifecycleOwner.lifecycleScope.launch { + viewModel.cover.collect { coverUrl -> + Glide.with(this@MemberInfoCardFragment) + .load(coverUrl) + .transform(RoundedCorners(100)) + .error(R.drawable.error_placeholder) + .into(binding.memberAvatarView) + } + } + + // 监听 vipCover 变化 + viewLifecycleOwner.lifecycleScope.launch { + viewModel.vipCover.collect { vipCoverUrl -> + Glide.with(this@MemberInfoCardFragment) + .load(vipCoverUrl) + .transform(RoundedCorners(100)) + .error(R.drawable.error_placeholder) + .into(binding.memberImageView) + } + } + + // 监听 background 变化 + viewLifecycleOwner.lifecycleScope.launch { + viewModel.background.collect { backgroundColor -> +// binding.memberCardCardView.setBackgroundColor(Color.parseColor(backgroundColor)) + binding.memberCardCardView.setBackgroundResource(backgroundColor) + } + } + + viewLifecycleOwner.lifecycleScope.launch { + viewModel.color.collect { color -> + binding.phoneNumberText.setTextColor(Color.parseColor(color)) + binding.memberStatus.setTextColor(Color.parseColor(color)) + } + } + + return binding.root + } + + override fun onDestroyView() { + super.onDestroyView() + _binding = null + } + + +} \ No newline at end of file -- Gitblit v1.9.3