แนะนำ Library สำหรับทำ Loading Placeholder Animation แบบ Facebook!

Theerapong.Kha
te<h @TDG
Published in
3 min readJun 25, 2020

โดยทั่วไปเมื่อเราเปิดแอปขึ้นมามักจะมีการโหลดข้อมูลจาก API กันก่อน ในจังหวะนี้ก็จะใช้เวลาสักครู่นึงในการโหลดข้อมูลให้เรียบร้อย ก่อนจะนำมาแสดงผลในแอปของเรา และโดยปกติเราก็จะคุ้นเคยกับการใช้งานพวก Spinner, Progress Bar กัน แต่บทความนี้เราจะมาแนะนำทุกท่านให้ลองใช้งาน การแสดงผลตอนกำลังโหลดข้อมูลแบบ Loading Placeholder Animation ที่ Facebook ใช้งานกันครับ

ในบทความนี้จะมาแนะนำ 2 Library ที่มีชื่อว่า Shimmer-android และ FiftyShadesOf โดยจะมีตัวอย่าง source code การใช้งานคร่าว ๆ สำหรับผู้อ่านที่สนใจได้นำไปศึกษา ลองใช้งานกันในท้ายบทความ

1. Shimmer-android

เป็น Library ที่พัฒนาโดย Facebook เอง การใช้งานก็ง่ายมาก แค่เพียงเราสร้าง layout ที่เราต้องการ และนำมาแปะไว้ภายใต้ ShimmerFrameLayout หลังจากนั้น เราก็แค่สั่ง startShimmer() เพื่อให้ Animation ทำงาน และแค่นี้เราก็จะได้การแสดงผล Loading Placeholder ของ content ในแอปของเราแล้ว สำหรับการใช้งานเพิ่มเติมสามารถอ่านได้จาก document ของ Shimmer page ได้เลย

เริ่มต้นการใช้งาน Shimmer

ก่อนอื่นก็ต้องทำการเพิ่ม dependency เข้าไปในโปรเจกของเรา ดังนี้

dependencies {
implementation 'com.facebook.shimmer:shimmer:0.5.0'
}

จากนั้นก็แค่เพียงสร้าง view layout ที่เราต้องการไปวางภายใต้ com.facebook.shimmer.ShimmerFrameLayou และก็แค่สั่ง startShimmer() เพื่อให้ Animation ทำงาน นอกจากนี้เรายังสามารถสั่งให้ auto start ได้ด้วยการเติม app:shimmer_auto_start=”true” เข้าไปใน xml ได้ด้วย

<com.facebook.shimmer.ShimmerFrameLayout
android:id="@+id/shimmer_view_container"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
...(your complex view here)...
</com.facebook.shimmer.ShimmerFrameLayout>

ตัวอย่างโค้ดที่เราจะสั่งให้ Animation ทำงาน หรือหยุด ดังนี้
- startShimmer() เพื่อสั่งให้ Animation ทำงาน
- stopShimmer() สั่งให้ Animation หยุดทำงาน

ShimmerFrameLayout container =
(ShimmerFrameLayout) findViewById(R.id.shimmer_view_container);
container.startShimmer(); //สั่งให้ Content Placeholder Animation ทำงาน
container.stopShimmer() //สั่งให้ animation หยุดทำงาน
ตัวอย่างแอปจากการใช้งาน shimmer-android

2. FiftyShadesOf

สำหรับอีกหนึ่ง Library ที่จะนำมาแนะนำกัน คือ FiftyShadesOf การใช้งาน Library นี้จะแตกต่างกันกับ Shimmer เล็กน้อย แต่การแสดงผล Loading Placeholder ก็คล้าย ๆ กัน ก่อนอื่นเริ่มต้นจากการติดตั้ง Dependency เข้าไป ดังนี้

implementation 'com.github.florent37:fiftyshadesof:1.0.0'

การใช้งาน FiftyShadesOf

เริ่มต้นด้วยการสร้าง View Layout ที่เราต้องการตอน Loading ขึ้นมาเช่นกัน และที่คำสั่ง on() เราสามารถนำ View ID, View Reference และ View Group เพิ่มเข้าไป และเมื่อสั่ง start() ก็จะทำให้ให้ Loading Placeholder Animation ทำงาน

FiftyShadesOf.with(context)

.on(R.id.view1, R.id.view2, R.id.view3) //views id

.on(view1, view2, view3) //views references

.on(viewGroup) //group of views

.except(view1, view2) //skip a view

.start();

ตัวอย่างโปรเจกนี้สร้าง xml ขึ้นมาหน้าตาประมาณนี้ โดยจะแบ่งแต่ละ item เป็น คนละ view กัน จำนวน 3 view โดยมีชื่อไฟล์ ดังนี้ fiftyshadesof_line0.xml, fiftyshadesof_line1.xml, fiftyshadesof_line2.xml

ตัวอย่างการแสดงผลของ layout ชื่อ fiftyshadesof_line0.xml, fiftyshadesof_line1.xml, fiftyshadesof_line2.xml ตามลำดับ
ตัวอย่าง code ของ fiftyshadesof_line0.xml

หลังจากสร้าง view layout ของแต่ละ item เรียบร้อยแล้ว ก็นำมา include เข้าไปใน layout ของ Activity ที่เราต้องการ โดยกำหนด id ว่า layout, layout1, layout2 ตามลำดับ ทีนี้เวลาเราจะใช้งาน fiftyshadesof ก็เพียงนำ id ที่เราตั้งชื่อนี้ ไปใส่ในคำสั่ง on() ได้เลย

ตัวอย่าง xml ของ activity
ตัวอย่าง View Layout ที่เราจะแสดงผล

ตัวอย่างโค้ดการใช้งาน FiftyShadesOf ด้านล่าง เพียงเท่านี้เราก็จะได้การแสดงผล Loading Content Placeholder ในแอปของเราเรียบร้อย ซึ่งใช้งานได้ง่ายมาก

ตัวอย่าง code การใช้งาน fiftyShadesOf
ตัวอย่างแอปจากการใช้งาน fiftyShadesOf

สรุป

จบบทความแนะนำการแสดงผลหน้าจอแบบ Loading Placeholder Animation แบบ Facebook เรียบร้อยแล้ว ก็หวังว่าจะเป็นประโยชน์สำหรับนักพัฒนา ที่อยากเปลี่ยนการแสดงผลตอน Loading ให้ดูดี ดูสวยงามยิ่งขึ้น แต่การแสดงผลดตอน Loading ด้วย progress bar ก็ยังคงเป็นอะไรที่ง่าย และตอบโจทย์การใช้งานอยู่ การเลือกใช้งานการแสดงผลแบบไหน อาจจะต้องดูความเหมาะสมกับ UX/UI กันอีกทีด้วยครับ

--

--