@@ -2,16 +2,43 @@ package com.labters.imagestackviewer
22
33import android.graphics.Bitmap
44import android.graphics.BitmapFactory
5+ import android.graphics.drawable.Drawable
56import android.util.Base64
67import android.widget.ImageView
8+ import android.widget.LinearLayout
9+ import androidx.core.graphics.ColorUtils
710import androidx.core.graphics.drawable.toBitmap
811import androidx.databinding.BindingAdapter
12+ import androidx.palette.graphics.Palette
913import com.bumptech.glide.Glide
14+ import com.bumptech.glide.load.DataSource
15+ import com.bumptech.glide.load.engine.GlideException
16+ import com.bumptech.glide.request.RequestListener
1017import com.bumptech.glide.request.RequestOptions
18+ import com.bumptech.glide.request.target.Target
1119import com.labters.imagestackviewer.data.ResourceType
1220import java.io.ByteArrayOutputStream
1321
14- object ImageViewExtensions
22+ object ImageViewExtensions {
23+
24+ private const val ALPHA = 180
25+
26+ /* *
27+ * Changes the background of the image when resource is ready.
28+ */
29+ fun onImageReady (imageView : ImageView , resource : Drawable ? ) {
30+ val bitmap = resource?.toBitmap()
31+ bitmap?.let {
32+ (imageView.parent as ? LinearLayout )?.let {
33+ Palette .Builder (bitmap).generate { palette ->
34+ it.setBackgroundColor(
35+ ColorUtils .setAlphaComponent(palette?.getDominantColor(0 ) ? : 0 , ALPHA )
36+ )
37+ }
38+ }
39+ }
40+ }
41+ }
1542
1643@BindingAdapter(value = [" app:src" , " app:isCenterCrop" ], requireAll = false )
1744fun ImageView.srcGlide (data : Any? , isCenterCrop : Boolean? ) {
@@ -40,6 +67,26 @@ fun ImageView.srcGlide(data: Any?, isCenterCrop: Boolean?) {
4067 .with (context)
4168 .load(resource)
4269 .apply (options)
70+ .addListener(object : RequestListener <Drawable > {
71+ override fun onResourceReady (
72+ resource : Drawable ? ,
73+ model : Any? ,
74+ target : Target <Drawable >? ,
75+ dataSource : DataSource ? ,
76+ isFirstResource : Boolean
77+ ): Boolean {
78+ ImageViewExtensions .onImageReady(this @srcGlide, resource)
79+ return false
80+ }
81+
82+ override fun onLoadFailed (
83+ e : GlideException ? ,
84+ model : Any? ,
85+ target : Target <Drawable >? ,
86+ isFirstResource : Boolean
87+ ): Boolean = false
88+
89+ })
4390 .into(this )
4491 }
4592}
0 commit comments