Set visibility of progress bar gone on completion of image loading using Glide library

前端 未结 12 2032
栀梦
栀梦 2020-12-04 11:04

Hi I want to have a progress bar for image which will shown while image loading but when image loading will be completed I want to set it to gone. Earlier I was using Picass

12条回答
  •  星月不相逢
    2020-12-04 11:40

    How I did things. the shorter way, cleaner code

    example:

    progress_bar.visibility = View.VISIBLE
    
    profilePicturePath?.let {
        GlideApp.with(applicationContext)
            .load(CloudStorage.pathToReference(it))
            .placeholder(R.drawable.placeholder)
            .listener(GlideImpl.OnCompleted {
                progress_bar.visibility = View.GONE
            })
        .into(profile_picture)
    } ?: profile_picture.setImageResource(R.drawable.placeholder)
    

    usage:

    GlideImpl.OnCompleted {
        // completed
    }
    

    just pass GlideImpl.OnCompleted { } to the Glide's .listener()

    GlideImpl.kt class that accepts Glide's RequestListener

    import android.graphics.drawable.Drawable
    import com.bumptech.glide.load.DataSource
    import com.bumptech.glide.load.engine.GlideException
    import com.bumptech.glide.request.RequestListener
    import com.bumptech.glide.request.target.Target
    
    object GlideImpl {
    
        object OnCompleted : RequestListener {
    
            private lateinit var onComplete: () -> Unit
    
            operator fun invoke(onComplete: () -> Unit): OnCompleted {
                OnCompleted.onComplete = { onComplete() }
                return this
            }
    
            override fun onResourceReady(
                resource: Drawable?,
                model: Any?,
                target: Target?,
                dataSource: DataSource?,
                isFirstResource: Boolean
            ): Boolean {
                onComplete()
                return false
            }
    
            override fun onLoadFailed(
                e: GlideException?,
                model: Any?,
                target: Target?,
                isFirstResource: Boolean
            ): Boolean {
                onComplete()
                return false
            }
        }
    }
    

    and that is it!

提交回复
热议问题