วันเสาร์ที่ 19 กรกฎาคม พ.ศ. 2557

แนะนำ Library โหลดภาพดีๆ "Picasso"

เชื่อว่า Developer หลายๆคนที่ได้ทำงานเกี่ยวกับการแสดงรูปภาพบนแอพคงได้เคยเจอปัญหาเจ้า  OutofMemoryError: bitmap size exceeds VM budget . กันอย่างแน่ๆ   ผู้เขียนเองก็เจออย่างบ่อย เกิดจากการที่เราเรียกใช้งานรูปภาพที่เป็น Bitmap เยอะๆ แล้วทำให้ VM Size ที่ตัว OS ของ device จ่ายมาให้เรามันไม่พอ อาจจะเป็นเพราะรูปภาพที่เราใช้ในแอพเรามันมีจำนวนเยอะเกินไป หรือไม่ก็มีขนาดใหญ่มากเกินไป  ซึ่ง Google ก็มีการเพิ่มตัว Attribute มาให้เราใน  Android 3.0  ซึ่งก็คือการประกาศ  android:largeHeap=true   เพื่อเป็นการเพิ่มขนาดของ VM Heap size ให้มีขนาดใหญ่ขึ้น  แต่นั่นก็ไม่ใช่วิธีการแก้ปัญหาที่ถูกต้อง   โดยวิธีการตามตัวอย่างที่ Google แนะนำนั้นคือการให้เราใช้งานเจ้าตัว Lrucache กบัการทำ Sample Size ของรูปภาพที่นำมาแสดงให้มีขนาดเล็กลง ควบคู่กันไป 


หลายๆคนในที่นี่เข้าใจว่าบางคนก็อาจจะเขียนเองโดยอิงตัวอย่างจากทาง Google หรือใช้  Libraries อื่นๆ เช่น UniversalImageLoader , LazyList ฯลฯ อันนี้ก็แล้วแต่ความถนัด แต่ที่ตัว Picasso ผู้เขียนจะมาแนะนำนั้นตัวผู้เขียนชอบมากสาเหตุเนื่องจากว่า

  1. ใช้งานนั้นง่าย เขียนโค๊ตแค่ 1 Line ก็เสร็จ 
  2. สามารถทำการแสดงรูปภาพได้ทั้งที่เป็นรูปจาก URL, Drawable หรือจาก File 


ตัวอย่างการใช้งานเจ้า Picasso ทำการแสดงรูปที่เป็น URL:
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
ทำการ Resize และทำ ScaleType ได้ด้วย

Picasso.with(context)
  .load(url)
  .resize(50, 50)
  .centerCrop()
  .into(imageView)
ทำการใส่รูปภาพที่เป็น pre-load ก่อนแล้วค่อยโหลดภาพที่จะแสดงมา รวมถึง แสดงรูปภาพ error หากไม่สามารถโหลดรูปภาพได้

Picasso.with(context)
    .load(url)
    .placeholder(R.drawable.user_placeholder)
    .error(R.drawable.user_placeholder_error)
    .into(imageView);


ส่วนตัวผู้เขียนว่า เจ้า Lib ตัวนี้จัดว่าเป็น Lib ที่สะดวกและง่ายต่อการใช้งานจริงๆ เหมาะสำหรับคนที่ไม่คิดอะไรมากเรื่อง Performance ประกาศแค่ Line เดียวปุ๊ปเสร็จปั๊ป ไม่ต้องยุ่งกับการ cache อะไรทั้งสิ้น นับว่าสะดวกมากๆเลยทีเดียว

ใครไม่เคยลองเจ้า Lib ตัวนี้หากสนใจก็ไปโหลดมาเล่นกันได้เลยจ้า มีทั้ง source code ทั้ง .jar ทั้ง Maven dependency ^__^




1 ความคิดเห็น:

  1. ไม่ระบุชื่อ30 มกราคม 2565 เวลา 15:36

    Why gambling is so hard, you've heard
    As the world of online gambling 바카라 사이트 grew, online gaming became kadangpintar more and more prevalent, resulting in more 바카라 사이트 countries opening in-person

    ตอบลบ