ภาพเคลื่อนไหวแบบเหวี่ยงใช้แรงเสียดทานซึ่งสัมพันธ์กับความเร็วของวัตถุ ใช้เพื่อทำให้พร็อพเพอร์ตี้ของออบเจ็กต์เคลื่อนไหวและเพื่อจบภาพเคลื่อนไหวอย่างช้าๆ โดยจะมีแรงกระตุ้นเริ่มต้นซึ่งส่วนใหญ่ได้รับจากความเร็วของท่าทางสัมผัส และค่อยๆ ช้าลง ภาพเคลื่อนไหวจะสิ้นสุดลงเมื่อความเร็วของภาพเคลื่อนไหวต่ำพอที่จะไม่ทำให้เกิดการเปลี่ยนแปลงที่มองเห็นได้บนหน้าจออุปกรณ์
อ่านคู่มือต่อไปนี้เพื่อดูข้อมูลเกี่ยวกับหัวข้อที่เกี่ยวข้อง
เพิ่มไลบรารี AndroidX
หากต้องการใช้ภาพเคลื่อนไหวตามฟิสิกส์ คุณต้องเพิ่มไลบรารี AndroidX ลงในโปรเจ็กต์ ดังนี้
- เปิดไฟล์
build.gradle
ของโมดูลแอป - เพิ่มไลบรารี AndroidX ลงในส่วน
dependencies
ดึงดูด
dependencies { implementation 'androidx.dynamicanimation:dynamicanimation:1.0.0' }
Kotlin
dependencies { implementation("androidx.dynamicanimation:dynamicanimation:1.0.0") }
สร้างภาพเคลื่อนไหวแบบสะบัด
คลาส FlingAnimation
ช่วยให้คุณสร้างภาพเคลื่อนไหวแบบฟลิงสำหรับวัตถุได้ หากต้องการสร้างภาพเคลื่อนไหวแบบฟลิง ให้สร้างอินสแตนซ์ของคลาส FlingAnimation
และระบุออบเจ็กต์และพร็อพเพอร์ตี้ของออบเจ็กต์ที่ต้องการสร้างภาพเคลื่อนไหว
Kotlin
val fling = FlingAnimation(view, DynamicAnimation.SCROLL_X)
Java
FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X);
ตั้งค่าความเร็ว
ความเร็วเริ่มต้นจะกำหนดความเร็วที่คุณสมบัติภาพเคลื่อนไหวมีการเปลี่ยนแปลงในช่วงเริ่มต้นของภาพเคลื่อนไหว ความเร็วเริ่มต้นเริ่มต้นจะตั้งไว้ที่ 0 พิกเซลต่อวินาที คุณจึงต้องกำหนดความเร็วเริ่มต้นเพื่อให้ภาพเคลื่อนไหวไม่จบลงทันที
คุณใช้ค่าคงที่อัตราความเร็วเริ่มต้นได้ หรือจะอ้างอิงจากความเร็วของท่าทางสัมผัสด้วยการแตะก็ได้ หากเลือกระบุค่าคงที่ คุณควรกําหนดค่าเป็น dp ต่อวินาที จากนั้นแปลงเป็นพิกเซลต่อวินาที การกําหนดค่าเป็น dp ต่อวินาทีจะช่วยให้ความเร็วไม่ขึ้นอยู่กับความหนาแน่นและรูปแบบของอุปกรณ์ ดูข้อมูลเพิ่มเติมเกี่ยวกับการแปลงความเร็วเริ่มต้นเป็นพิกเซลต่อวินาทีได้ที่ส่วนการแปลง dp ต่อวินาทีเป็นพิกเซลต่อวินาทีในภาพเคลื่อนไหวแบบสปริง
หากต้องการตั้งค่าความเร็ว ให้เรียกใช้เมธอด setStartVelocity()
และส่งค่าความเร็วเป็นพิกเซลต่อวินาที เมธอดจะแสดงผลออบเจ็กต์ Fling ที่มีการตั้งค่าความเร็ว
หมายเหตุ: ใช้คลาส GestureDetector.OnGestureListener
และ VelocityTracker
เพื่อดึงข้อมูลและคำนวณความเร็วของท่าทางสัมผัสตามลำดับ
กำหนดช่วงค่าของภาพเคลื่อนไหว
คุณกำหนดค่าต่ำสุดและสูงสุดของภาพเคลื่อนไหวได้เมื่อต้องการจำกัดค่าของพร็อพเพอร์ตี้เป็นช่วงๆ ตัวควบคุมช่วงนี้จะมีประโยชน์อย่างยิ่งเมื่อคุณสร้างภาพเคลื่อนไหวของพร็อพเพอร์ตี้ที่มีช่วงโดยธรรมชาติ เช่น อัลฟ่า (จาก 0 ถึง 1)
หมายเหตุ: เมื่อค่าของภาพเคลื่อนไหวแบบสะบัดมีค่าถึงค่าต่ำสุดหรือสูงสุด ภาพเคลื่อนไหวจะสิ้นสุดลง
หากต้องการกำหนดค่าต่ำสุดและสูงสุด ให้ใช้เมธอด setMinValue()
และ setMaxValue()
ตามลำดับ
ทั้ง 2 วิธีจะแสดงผลออบเจ็กต์ภาพเคลื่อนไหวที่คุณตั้งค่าไว้
ตั้งค่าอุปสรรค
วิธีการ setFriction()
ช่วยให้คุณเปลี่ยนแรงเสียดทานของภาพเคลื่อนไหวได้ ซึ่งระบุความเร็วที่ความเร็วลดลงในภาพเคลื่อนไหว
หมายเหตุ: หากไม่ได้กำหนดแรงเสียดสีไว้ที่ตอนต้นของภาพเคลื่อนไหว ภาพเคลื่อนไหวจะใช้ค่าความติดขัดเริ่มต้นเป็น 1
เมธอดจะแสดงผลออบเจ็กต์ที่มีภาพเคลื่อนไหวซึ่งใช้ค่าแรงเสียดทานที่คุณระบุ
โค้ดตัวอย่าง
ตัวอย่างด้านล่างแสดงการพุ่งในแนวนอน ความเร็วที่บันทึกจากเครื่องมือติดตามความเร็วคือ velocityX
และขอบเขตการเลื่อนถูกตั้งค่าเป็น 0 และ maxScroll การตั้งค่าแรงเสียดทานคือ 1.1
Kotlin
FlingAnimation(view, DynamicAnimation.SCROLL_X).apply { setStartVelocity(-velocityX) setMinValue(0f) setMaxValue(maxScroll) friction = 1.1f start() }
Java
FlingAnimation fling = new FlingAnimation(view, DynamicAnimation.SCROLL_X); fling.setStartVelocity(-velocityX) .setMinValue(0) .setMaxValue(maxScroll) .setFriction(1.1f) .start();
ตั้งค่าการเปลี่ยนแปลงขั้นต่ำที่มองเห็นได้
เมื่อคุณทำให้พร็อพเพอร์ตี้ที่กำหนดเองซึ่งไม่ได้กำหนดเป็นพิกเซลเคลื่อนไหว คุณควรตั้งค่าการเปลี่ยนแปลงขั้นต่ำของค่าการเคลื่อนไหวที่ผู้ใช้มองเห็น โดยจะกำหนดเกณฑ์ที่เหมาะสมสำหรับการสิ้นสุดภาพเคลื่อนไหว
ไม่จำเป็นต้องเรียกใช้เมธอดนี้เมื่อทำให้ DynamicAnimation.ViewProperty
เคลื่อนไหว เนื่องจากการเปลี่ยนแปลงขั้นต่ำที่มองเห็นได้นั้นมาจากพร็อพเพอร์ตี้ เช่น
- ค่าการเปลี่ยนแปลงขั้นต่ำที่มองเห็นได้โดยค่าเริ่มต้นคือ 1 พิกเซลสำหรับพร็อพเพอร์ตี้
เช่น
TRANSLATION_X
,TRANSLATION_Y
,TRANSLATION_Z
,SCROLL_X
และSCROLL_Y
- สำหรับภาพเคลื่อนไหวที่ใช้การหมุน เช่น
ROTATION
,ROTATION_X
และROTATION_Y
การเปลี่ยนแปลงที่มองเห็นได้น้อยที่สุดคือMIN_VISIBLE_CHANGE_ROTATION_DEGREES
หรือ 1/10 พิกเซล - สำหรับภาพเคลื่อนไหวที่ใช้ความทึบแสง การเปลี่ยนแปลงที่มองเห็นได้ขั้นต่ำคือ
MIN_VISIBLE_CHANGE_ALPHA
หรือ 1/256
หากต้องการตั้งค่าการเปลี่ยนแปลงที่มองเห็นได้ขั้นต่ำสำหรับภาพเคลื่อนไหว ให้เรียกใช้เมธอด setMinimumVisibleChange()
และส่งค่าคงที่ที่มองเห็นได้ขั้นต่ำรายการใดรายการหนึ่งหรือค่าที่คุณต้องคำนวณสำหรับพร็อพเพอร์ตี้ที่กำหนดเอง ดูข้อมูลเพิ่มเติมเกี่ยวกับการคำนวณค่านี้ได้ในส่วนการคำนวณค่าการเปลี่ยนแปลงขั้นต่ำที่มองเห็นได้
Kotlin
anim.minimumVisibleChange = DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE
Java
anim.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_SCALE);
หมายเหตุ: คุณต้องส่งค่าเฉพาะเมื่อคุณทำให้พร็อพเพอร์ตี้ที่กำหนดเองซึ่งไม่ได้กำหนดไว้เป็นพิกเซลเคลื่อนไหวเท่านั้น
การคํานวณค่าการเปลี่ยนแปลงที่มองเห็นได้ขั้นต่ำ
หากต้องการคํานวณมูลค่าการเปลี่ยนแปลงที่มองเห็นได้ขั้นต่ำสําหรับพร็อพเพอร์ตี้ที่กําหนดเอง ให้ใช้สูตรต่อไปนี้
การเปลี่ยนแปลงที่มองเห็นได้ขั้นต่ำ = ช่วงของค่าพร็อพเพอร์ตี้ที่กำหนดเอง / ช่วงของภาพเคลื่อนไหวในพิกเซล
เช่น พร็อพเพอร์ตี้ที่คุณต้องการแสดงภาพเคลื่อนไหวมีการเปลี่ยนแปลงจาก 0 เป็น 100 ซึ่งสอดคล้องกับการเปลี่ยนแปลง 200 พิกเซล จากสูตร ค่าการเปลี่ยนแปลงที่มองเห็นได้ขั้นต่ำคือ 100 / 200 ซึ่งเท่ากับ 0.5 พิกเซล