การโหลดรูปภาพด้วย 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Retrofit และ REST APIs
- การโหลดรูปภาพด้วย Coil
- การจัดการข้อผิดพลาดและประสบการณ์ผู้ใช้
- การแจ้งเตือนแบบพุช
- WorkManager และงานเบื้องหลัง
- การเผยแพร่ไปยัง Play Store