BindingComponent.kt 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package library
  2. import android.graphics.drawable.ColorDrawable
  3. import android.graphics.drawable.Drawable
  4. import android.text.TextUtils
  5. import android.widget.ImageView
  6. import androidx.databinding.BindingAdapter
  7. import androidx.databinding.BindingConversion
  8. import androidx.databinding.DataBindingComponent
  9. import com.bumptech.glide.Glide
  10. import com.bumptech.glide.Priority
  11. import com.bumptech.glide.load.engine.DiskCacheStrategy
  12. import com.bumptech.glide.load.resource.bitmap.CircleCrop
  13. import com.bumptech.glide.request.RequestOptions
  14. import jp.wasabeef.glide.transformations.RoundedCornersTransformation
  15. import library.ext.dp2px
  16. /**
  17. * DataBinding 默认控件组合
  18. */
  19. object BindingComponent : DataBindingComponent {
  20. /**
  21. * 加载头像或者图标
  22. *
  23. * @param imageView 加载控件
  24. * @param url 加载图片的地址
  25. * @param placeHolder 控件的占位符
  26. * @param error 加载失败的显示错误图片
  27. */
  28. @JvmStatic
  29. @BindingAdapter(value = ["load", "placeholder", "error"], requireAll = false)
  30. fun load(imageView: ImageView, url: String?, placeHolder: Drawable?, error: Drawable?) {
  31. if (TextUtils.isEmpty(url)) {
  32. imageView.setImageDrawable(placeHolder ?: error)
  33. } else {
  34. val requestOptions = RequestOptions().also {
  35. if (placeHolder != null) it.placeholder(placeHolder)
  36. if (error != null) it.error(error)
  37. it.priority(Priority.HIGH)//优先级
  38. it.diskCacheStrategy(DiskCacheStrategy.NONE)//缓存策略
  39. }
  40. Glide.with(imageView.context).load(url).apply(requestOptions).into(imageView)
  41. }
  42. }
  43. /**
  44. * 加载圆角方形头像或者图标
  45. *
  46. * @param imageView 加载控件
  47. * @param url 加载图片的地址
  48. * @param radius 图片剪切的圆角值
  49. * @param placeHolder 控件的占位符
  50. * @param error 加载失败的显示错误图片
  51. */
  52. @JvmStatic
  53. @BindingAdapter(value = ["round", "radius", "placeholder", "error"], requireAll = false)
  54. fun loadRound(imageView: ImageView, url: String?, radius: Int?, placeHolder: Drawable?, error: Drawable?) {
  55. if (TextUtils.isEmpty(url)) {
  56. imageView.setImageDrawable(placeHolder ?: error)
  57. } else {
  58. val transformation = RoundedCornersTransformation(radius?.dp2px(imageView.context) ?: 8, 8)
  59. val requestOptions = RequestOptions().also {
  60. it.centerCrop()
  61. if (placeHolder != null) it.placeholder(placeHolder)
  62. if (error != null) it.error(error)
  63. it.priority(Priority.HIGH)//优先级
  64. it.diskCacheStrategy(DiskCacheStrategy.NONE)//缓存策略
  65. it.transform(transformation)//转化为圆形
  66. }
  67. Glide.with(imageView.context).load(url).apply(requestOptions).into(imageView)
  68. }
  69. }
  70. /**
  71. * 加载圆形头像或者图标
  72. *
  73. * @param imageView 加载控件
  74. * @param url 加载图片的地址
  75. * @param placeHolder 控件的占位符
  76. * @param error 加载失败的显示错误图片
  77. */
  78. @JvmStatic
  79. @BindingAdapter(value = ["circle", "placeholder", "error"], requireAll = false)
  80. fun loadCircle(imageView: ImageView, url: String?, placeHolder: Drawable?, error: Drawable?) {
  81. if (TextUtils.isEmpty(url)) {
  82. imageView.setImageDrawable(placeHolder ?: error)
  83. } else {
  84. val transformation = CircleCrop()
  85. val requestOptions = RequestOptions().also {
  86. it.centerCrop()
  87. if (placeHolder != null) it.placeholder(placeHolder)
  88. if (error != null) it.error(error)
  89. it.priority(Priority.HIGH)//优先级
  90. it.diskCacheStrategy(DiskCacheStrategy.NONE)//缓存策略
  91. it.transform(transformation)
  92. }//转化为圆形
  93. Glide.with(imageView.context).load(url).apply(requestOptions).into(imageView)
  94. }
  95. }
  96. /**
  97. * 对将Color转换Drawable类型
  98. */
  99. @JvmStatic
  100. @BindingConversion
  101. fun convertColorToDrawable(colorRes: Int): ColorDrawable {
  102. return ColorDrawable(colorRes)
  103. }
  104. }