💾 Data, Network और Architecture · Lesson 34
Glide से Images load करें
Image library क्यों?
हाथ से images load करने का मतलब: background thread पर download, decode, view size पर resize, caching, row scroll होने पर cancel… Glide यह सब एक line में करता है।
Setup
TOML + Kotlin DSL + XML
# libs.versions.toml
glide = "4.16.0"
glide = { group = "com.github.bumptech.glide", name = "glide", version.ref = "glide" }
// app/build.gradle.kts
implementation(libs.glide)
<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.INTERNET" />URL से load
Kotlin
Glide.with(this) // Activity, Fragment or View
.load("https://codingeasily.in/assets/img/tutorials/android/tip-1.png")
.into(binding.ivTip)Placeholder, error, crop
Kotlin
Glide.with(this)
.load(product.imageUrl)
.placeholder(R.drawable.ic_image) // while loading
.error(R.drawable.ic_broken_image) // if it fails
.centerCrop()
.into(binding.ivProduct)
// round avatar
Glide.with(this).load(user.photoUrl).circleCrop().into(binding.ivAvatar)
// rounded corners (16 px) after centerCrop
Glide.with(this).load(url)
.transform(CenterCrop(), RoundedCorners(16))
.into(binding.ivBanner)
// fade in
Glide.with(this).load(url).transition(DrawableTransitionOptions.withCrossFade()).into(binding.ivBanner)RecyclerView में images
Kotlin
override fun onBindViewHolder(holder: VH, position: Int) {
val p = getItem(position)
holder.binding.tvName.text = p.name
Glide.with(holder.binding.ivThumb) // bind to the view → auto-cancel on recycle
.load(p.imageUrl)
.placeholder(R.drawable.ic_image)
.centerCrop()
.into(holder.binding.ivThumb)
}Local files और photos
Kotlin
// Student Diary – photo copied into app storage (File)
note.imagePath?.let { Glide.with(b.ivThumb).load(File(it)).centerCrop().into(b.ivThumb) }
// content:// Uri from the photo picker
Glide.with(this).load(uri).into(binding.ivPhoto)
// a drawable resource
Glide.with(this).load(R.drawable.banner).into(binding.ivBanner)Caching
Kotlin
// Glide caches in memory + on disk automatically.
// Force a fresh download (e.g. a profile photo that changed on the server):
Glide.with(this).load(url)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.into(binding.ivAvatar)
// Better: change the URL when the image changes – https://…/avatar.jpg?v=3आम गलतियाँ
- Fragment में
Glide.with(applicationContext)→ screen के साथ requests cancel नहीं होतीं; fragment या view use करें। - 80dp thumbnails के लिए बड़ी server images (3000px) → data बर्बाद; API से छोटी images दें।
- Lists में placeholder नहीं → recycled rows में पुरानी images चमकती हैं।
सारांश
Glide.with(x).load(source).into(imageView)— source URL, File, Uri या resource हो सकता है।- placeholder/error, centerCrop/circleCrop/RoundedCorners जोड़ें।
- Caching और recycling आपके लिए handled हैं।
✅ Practice
android-tips.json की tip images को rounded corners, placeholder और cross-fade के साथ 2-column grid में दिखाइए।
अक्सर पूछे जाने वाले प्रश्न (FAQ)
Glide या Coil?
दोनों बढ़िया हैं। View-based apps के लिए Glide पुराना standard है और यहाँ use हुआ है। Coil Kotlin-first है और Jetpack Compose के साथ popular है।
क्या Glide के लिए INTERNET permission चाहिए?
हाँ, http(s) images load करने के लिए। Local files और resources के लिए नहीं।
मेरी list में images थोड़ी देर गलत picture क्यों दिखाती हैं?
Recycled rows पिछली image दिखाती हैं। हर bind पर Glide.with(view).load(...).into(view) call करने से Glide पुरानी requests अपने आप cancel करता है; placeholder भी set करें।
