ภาพเคลื่อนไหวที่อิงตามการเหวี่ยงจะใช้แรงเสียดทานที่เป็นสัดส่วนกับความเร็วของวัตถุ ใช้เพื่อสร้างภาพเคลื่อนไหวของพร็อพเพอร์ตี้ของออบเจ็กต์และเพื่อสิ้นสุดภาพเคลื่อนไหวอย่างค่อยเป็นค่อยไป โดยจะมีโมเมนตัมเริ่มต้น ซึ่งส่วนใหญ่จะได้รับจากความเร็วของท่าทางสัมผัส และค่อยๆ ช้าลง ภาพเคลื่อนไหวจะสิ้นสุดลงเมื่อความเร็วของภาพเคลื่อนไหวต่ำพอที่จะไม่ทำให้เกิดการเปลี่ยนแปลงที่มองเห็นได้บนหน้าจออุปกรณ์
หากต้องการดูข้อมูลเกี่ยวกับหัวข้อที่เกี่ยวข้อง โปรดอ่านคำแนะนำต่อไปนี้
เพิ่มไลบรารี 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() และส่งความเร็วเป็นพิกเซลต่อวินาที เมธอดจะแสดงผลออบเจ็กต์การเหวี่ยงที่ตั้งค่าความเร็วไว้
หมายเหตุ: ใช้คลาส 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 พิกเซล