0Pricing
Android Academy · บทเรียน

การโหลดรูปภาพด้วย Coil

โหลดและแคชรูปภาพจากเครือข่ายอย่างมีประสิทธิภาพด้วย Coil ใช้การแปลงรูปภาพ (CircleCrop, RoundedCorners) และจัดการภาพแทนที่กับข้อผิดพลาด

การโหลดรูปภาพด้วย Coil เป็นบทเรียน Android Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 6 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Android Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Android Academy มีบทเรียนทั้งหมด 6 บทเรียน

ทำไมต้องใช้ไลบรารีรูปภาพ

การโหลดรูปภาพจากอินเทอร์เน็ตซับซ้อนกว่าที่คิด:

  • ดาวน์โหลดบนเธรดเบื้องหลัง
  • แคชลงดิสก์และหน่วยความจำ
  • ถอดรหัสอย่างมีประสิทธิภาพ (หลีกเลี่ยงการแครชจาก OOM)
  • แสดงภาพตัวแทนขณะโหลด
  • จัดการข้อผิดพลาด (ลิงก์เสียหรือไม่มีเครือข่าย)

Coil จัดการทั้งหมดนี้ได้ด้วยโค้ดเพียงบรรทัดเดียว

Coil คืออะไร

Coil (Coroutine Image Loader) คือไลบรารีโหลดรูปภาพ Android สมัยใหม่ที่สร้างขึ้นสำหรับ Kotlin และโคโรทีน

  • มีขนาดเล็กกว่า Glide หรือ Picasso
  • ออกแบบโดยยึด Kotlin เป็นหลักและรองรับโคโรทีน
  • รับรู้วงจรชีวิต — ยกเลิกการโหลดโดยอัตโนมัติ
  • รองรับ GIF, SVG และเฟรมวิดีโอ

การเพิ่ม Coil

เพิ่มการพึ่งพาลงใน app/build.gradle:

// app/build.gradle
dependencies {
    implementation 'io.coil-kt:coil:2.6.0'
}

// Also make sure internet permission is in AndroidManifest.xml:
// <uses-permission android:name="android.permission.INTERNET" />

การโหลดรูปภาพพื้นฐาน

โหลดรูปภาพลงใน ImageView ด้วยโค้ดเพียงบรรทัดเดียว:

import coil.load

// In your Activity or Adapter:
binding.ivAvatar.load("https://picsum.photos/200")

// With a placeholder and error image:
binding.ivAvatar.load("https://picsum.photos/200") {
    placeholder(R.drawable.ic_placeholder)
    error(R.drawable.ic_error)
    crossfade(true)  // smooth fade-in animation
}

การโหลดใน RecyclerView

Coil จะยกเลิกการโหลดที่รอดำเนินการโดยอัตโนมัติเมื่อมีการนำ ViewHolder กลับมาใช้ใหม่ จึงป้องกันไม่ให้รูปภาพผิดไปปรากฏในแถวที่ไม่ถูกต้อง:

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    val post = getItem(position)

    holder.tvTitle.text = post.title

    holder.ivCover.load(post.imageUrl) {
        placeholder(R.drawable.ic_image_placeholder)
        error(R.drawable.ic_broken_image)
        crossfade(300)  // 300ms fade-in
        size(200, 200)  // resize to 200×200 pixels
    }
}

การแปลงรูปภาพ

ใช้การแปลงกับรูปภาพที่โหลดมา:

  • CircleCropTransformation() — ทำรูปภาพให้เป็นวงกลม (เหมาะอย่างยิ่งสำหรับรูปอวตาร)
  • RoundedCornersTransformation(radius) — ทำมุมรูปภาพให้โค้งมน
  • BlurTransformation(context, radius) — สร้างเอฟเฟกต์เบลอ

ตัวอย่างการแปลงรูปภาพ

แสดงรูปอวตารของผู้ใช้เป็นวงกลม:

import coil.load
import coil.transform.CircleCropTransformation
import coil.transform.RoundedCornersTransformation

// Circular avatar
binding.ivAvatar.load(user.profileImageUrl) {
    transformations(CircleCropTransformation())
    placeholder(R.drawable.ic_default_avatar)
    error(R.drawable.ic_default_avatar)
}

// Rounded corners on a card image
binding.ivCover.load(post.coverUrl) {
    transformations(RoundedCornersTransformation(16f))
    crossfade(true)
}

การทำงานของแคช

Coil จะแคชรูปภาพโดยอัตโนมัติในสองระดับ:

  • แคชหน่วยความจำ — เร็วที่สุด และถูกล้างเมื่อแอปถูกปิด
  • แคชดิสก์ — คงอยู่ระหว่างการเปิดแอปแต่ละครั้ง โดยค่าเริ่มต้นคือ 250 MB

หากโหลด URL เดิมสองครั้ง การโหลดครั้งที่สองจะมาจากแคช โดยไม่ต้องส่งคำขอผ่านเครือข่าย

การโหลดจากแหล่งข้อมูลต่าง ๆ

Coil สามารถโหลดรูปภาพจากแหล่งข้อมูลได้หลายประเภท ไม่ใช่แค่ URL:

// From a URL (most common)
imageView.load("https://example.com/image.jpg")

// From a URI (e.g., gallery image)
imageView.load(uri)

// From a drawable resource
imageView.load(R.drawable.my_image)

// From a File
imageView.load(File("/sdcard/photo.jpg"))

// From a bitmap
imageView.load(bitmap)

ตรวจสอบความเข้าใจ

คุณจะใช้การแปลงรูปภาพแบบใดของ Coil เพื่อแสดงรูปโปรไฟล์ผู้ใช้เป็นวงกลม

สรุป: การโหลดรูปภาพด้วย Coil

ขณะนี้คุณสามารถแสดงรูปภาพจากเครือข่ายได้อย่างมีประสิทธิภาพแล้ว:

  • เพิ่ม Coil ด้วยการประกาศ Gradle dependency เพียงรายการเดียว
  • imageView.load(url) { } — โหลดรูปภาพด้วยโค้ดเพียงหนึ่งบรรทัด
  • รูปภาพตัวแทนและรูปภาพสำรองเมื่อเกิดข้อผิดพลาด
  • การแปลงรูปภาพ: CircleCrop, RoundedCorners, Blur
  • แคชอัตโนมัติทั้งในหน่วยความจำและดิสก์
  • รองรับ URL, URI, ไฟล์, drawable และ bitmap

ถัดไป: จัดการข้อผิดพลาดอย่างเหมาะสมและมอบข้อมูลตอบกลับที่ดีแก่ผู้ใช้

คำถามที่พบบ่อย

บทเรียน “การโหลดรูปภาพด้วย Coil” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การโหลดรูปภาพด้วย Coil” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Android Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Android Academy มีบทเรียนทั้งหมด 6 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การโหลดรูปภาพด้วย Coil”

โหลดและแคชรูปภาพจากเครือข่ายอย่างมีประสิทธิภาพด้วย Coil ใช้การแปลงรูปภาพ (CircleCrop, RoundedCorners) และจัดการภาพแทนที่กับข้อผิดพลาด คุณปฏิบัติ Android Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Android Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Android Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 6 บทเรียน

บทเรียน “การโหลดรูปภาพด้วย Coil” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Android Academy นี้ได้ไหม

ได้ บทเรียน Android Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. Retrofit และ REST APIs
  2. การโหลดรูปภาพด้วย Coil
  3. การจัดการข้อผิดพลาดและประสบการณ์ผู้ใช้
  4. การแจ้งเตือนแบบพุช
  5. WorkManager และงานเบื้องหลัง
  6. การเผยแพร่ไปยัง Play Store
← กลับไปที่ Android Academy