学考乐离线App
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

AdapterCoursePackWithMemo.kt 8.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. package com.xkl.cdl.adapter
  2. import android.annotation.SuppressLint
  3. import android.content.res.ColorStateList
  4. import android.graphics.Color
  5. import android.view.View
  6. import android.view.ViewGroup
  7. import android.view.ViewTreeObserver
  8. import android.widget.TextView
  9. import androidx.core.content.ContextCompat
  10. import com.google.android.material.badge.BadgeDrawable
  11. import com.google.android.material.badge.BadgeUtils
  12. import com.google.android.material.imageview.ShapeableImageView
  13. import com.suliang.common.base.adapter.BaseAdapterViewHolder
  14. import com.suliang.common.base.adapter.BaseRVAdapterVM
  15. import com.suliang.common.databinding.ItemEmptyBinding
  16. import com.suliang.common.extension.click
  17. import com.suliang.common.util.os.ScreenUtil
  18. import com.xkl.cdl.R
  19. import com.xkl.cdl.data.AppConstants
  20. import com.xkl.cdl.data.bean.MemoCoursePack
  21. import com.xkl.cdl.data.bean.course.Course
  22. import com.xkl.cdl.data.binding.BindingAdapter
  23. import com.xkl.cdl.databinding.ItemMemoBinding
  24. import com.xkl.cdl.module.m_memo.MemoFragmentViewModel
  25. /**
  26. * author suliang
  27. * create 2022/5/30 16:56
  28. * Describe: 备忘本适配器
  29. */
  30. class AdapterCoursePackWithMemo(viewModel : MemoFragmentViewModel) :
  31. BaseRVAdapterVM<MemoCoursePack, MemoFragmentViewModel>(viewModel) {
  32. // private val badgeDrawable : BadgeDrawable by lazy {
  33. // BadgeDrawable.create(context).apply {
  34. // badgeGravity = BadgeDrawable.TOP_END
  35. // maxCharacterCount = 3
  36. // backgroundColor = ContextCompat.getColor(context, R.color.red_1)
  37. // badgeTextColor = ContextCompat.getColor(context, R.color.white)
  38. // horizontalOffset = -ScreenUtil.dp2px(6f).toInt()
  39. // verticalOffset = ScreenUtil.dp2px(6f).toInt()
  40. // }
  41. // }
  42. override fun onBindEmptyViewHolder(holder : BaseAdapterViewHolder) {
  43. (holder.binding as ItemEmptyBinding).run {
  44. //根据监听,显示具体的内容
  45. vm.etSearchLiveData.value?.let {
  46. if (it.isNotEmpty()) {
  47. imgEmpty.setImageResource(R.mipmap.empty_nothing_search)
  48. tvContent.text = "没有搜索到任何内容"
  49. } else {
  50. imgEmpty.setImageResource(R.mipmap.empty_nothing)
  51. tvContent.text = "没有数据"
  52. }
  53. }
  54. }
  55. }
  56. override fun coverViewHolder(parent : ViewGroup, viewType : Int) : BaseAdapterViewHolder {
  57. return BaseAdapterViewHolder(inflateBinding(parent, R.layout.item_memo))
  58. }
  59. override fun onBindVH(holder : BaseAdapterViewHolder, position : Int) {
  60. getItem(position).let { item ->
  61. (holder.binding as ItemMemoBinding).run {
  62. //图片
  63. BindingAdapter.imageFilePath(imgCoursePackCover, item.coursePack.cover)
  64. //文字
  65. tvCoursePackName.text = item.coursePack.coursePackName
  66. //图标与角标文字
  67. item.coursePack.childrenCourses.forEachIndexed { index : Int, course : Course ->
  68. when (course.courseType) {
  69. AppConstants.COURSE_TYPE_ENGLISH_DISCERN -> setImageIcon(imgCourseIcon1,tvReviewNumber1,course.courseType,item.coursePackChildrenReview.getOrDefault(course.courseId,0))
  70. AppConstants.COURSE_TYPE_ENGLISH_SPELL -> setImageIcon(imgCourseIcon2,tvReviewNumber2,course.courseType,item.coursePackChildrenReview.getOrDefault(course.courseId,0))
  71. AppConstants.COURSE_TYPE_ENGLISH_VOICE -> setImageIcon(imgCourseIcon3,tvReviewNumber3,course.courseType,item.coursePackChildrenReview.getOrDefault(course.courseId,0))
  72. //其他只有一个课程类型
  73. else -> {
  74. setImageIcon(imgCourseIcon1,tvReviewNumber1,course.courseType,item.coursePackChildrenReview.getOrDefault(course.courseId,0))
  75. imgCourseIcon2.visibility = View.INVISIBLE
  76. tvReviewNumber2.visibility = View.GONE
  77. imgCourseIcon3.visibility = View.INVISIBLE
  78. tvReviewNumber3.visibility = View.GONE
  79. imgCourseIcon1.visibility = View.VISIBLE
  80. }
  81. }
  82. }
  83. root.click { onItemClick.invoke(holder.itemView,position,item) }
  84. }
  85. }
  86. }
  87. /**
  88. * 设置图片 角标 与 背景,有复习number数据需要设置角标与背景,否则不需要
  89. * @param imageView ShapeableImageView 图片
  90. * @param courseType Int 课程类型
  91. * @param reviewNumber Int 复习数量
  92. */
  93. @SuppressLint("UnsafeOptInUsageError")
  94. private fun setImageIcon(imageView : ShapeableImageView, tvReviewNumber: TextView, courseType : Int, reviewNumber : Int) {
  95. imageView.visibility = View.VISIBLE
  96. var color : Int = Color.parseColor("#00000000")
  97. when (reviewNumber) {
  98. //没有数据
  99. 0 -> {
  100. imageView.strokeColor = ColorStateList.valueOf(color)
  101. //设置图标: 灰色,没有背景
  102. imageView.setImageResource(getCourseIcon(courseType))
  103. imageView.imageTintList = ColorStateList.valueOf(Color.parseColor("#9A9EB3"))
  104. tvReviewNumber.visibility = View.GONE
  105. }
  106. //有复习数据
  107. else -> {
  108. when (courseType) {
  109. AppConstants.COURSE_TYPE_ENGLISH_DISCERN -> color = Color.parseColor("#1A5082E6")
  110. AppConstants.COURSE_TYPE_ENGLISH_SPELL -> color = Color.parseColor("#1AF26255")
  111. AppConstants.COURSE_TYPE_ENGLISH_SPOKEN, AppConstants.COURSE_TYPE_ENGLISH_VOICE -> color = Color.parseColor(
  112. "#1A52CC52")
  113. AppConstants.COURSE_TYPE_CHINESE_COMPOSITION, AppConstants.COURSE_TYPE_ENGLISH_SOUNDMARK -> color = Color.parseColor(
  114. "#1A8757E6")
  115. AppConstants.COURSE_TYPE_CHINESE_PINYIN -> color = Color.parseColor("#1AEB54D8")
  116. AppConstants.COURSE_TYPE_CHINESE_LITERACY -> color = Color.parseColor("#1AFF8B52")
  117. }
  118. imageView.strokeColor = ColorStateList.valueOf(color)
  119. //设置图标:原图颜色
  120. imageView.setImageResource(getCourseIcon(courseType))
  121. //添加角标
  122. tvReviewNumber.text = if (reviewNumber > 99 ) "99+" else "$reviewNumber"
  123. tvReviewNumber.visibility = View.VISIBLE
  124. }
  125. }
  126. }
  127. private fun getCourseIcon(courseType : Int) : Int {
  128. return when (courseType) {
  129. AppConstants.COURSE_TYPE_ENGLISH_DISCERN -> R.drawable.ic_course_discern
  130. AppConstants.COURSE_TYPE_ENGLISH_SPELL -> R.drawable.ic_course_spell
  131. AppConstants.COURSE_TYPE_ENGLISH_SPOKEN -> R.drawable.ic_course_spoken
  132. AppConstants.COURSE_TYPE_ENGLISH_VOICE -> R.drawable.ic_course_voice
  133. AppConstants.COURSE_TYPE_CHINESE_COMPOSITION -> R.drawable.ic_course_composition
  134. AppConstants.COURSE_TYPE_ENGLISH_SOUNDMARK -> R.drawable.ic_course_soundmark
  135. AppConstants.COURSE_TYPE_CHINESE_PINYIN -> R.drawable.ic_course_pinying
  136. AppConstants.COURSE_TYPE_CHINESE_LITERACY -> R.drawable.ic_course_literacy
  137. else -> 0
  138. }
  139. }
  140. private fun getCourseIconOriginColor(courseType : Int) : Int {
  141. return when (courseType) {
  142. AppConstants.COURSE_TYPE_ENGLISH_DISCERN -> Color.parseColor("#5082E6")
  143. AppConstants.COURSE_TYPE_ENGLISH_SPELL -> Color.parseColor("#F26255")
  144. AppConstants.COURSE_TYPE_ENGLISH_SPOKEN, AppConstants.COURSE_TYPE_ENGLISH_VOICE -> Color.parseColor("#52CC52")
  145. AppConstants.COURSE_TYPE_CHINESE_COMPOSITION, AppConstants.COURSE_TYPE_ENGLISH_SOUNDMARK -> Color.parseColor(
  146. "#8757E6")
  147. AppConstants.COURSE_TYPE_CHINESE_PINYIN -> Color.parseColor("#EB54D8")
  148. AppConstants.COURSE_TYPE_CHINESE_LITERACY -> Color.parseColor("#FF8B52")
  149. else -> 0
  150. }
  151. }
  152. }