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
|
}
|
|
|
}
|