ย้ายมุมมองโดยใช้ภาพเคลื่อนไหวแบบสะบัด

ลองใช้วิธีการเขียน
Jetpack Compose เป็นชุดเครื่องมือ UI ที่แนะนำสำหรับ Android ดูวิธีใช้ภาพเคลื่อนไหวใน Compose

ภาพเคลื่อนไหวแบบการสะบัดใช้แรงเสียดสีตามสัดส่วน ของวัตถุ ใช้เพื่อสร้างการเคลื่อนไหวให้กับพร็อพเพอร์ตี้ของวัตถุ และ ให้ภาพเคลื่อนไหวค่อยๆ จบลงทีละน้อย มีแรงผลักดันเริ่มต้น ซึ่งก็คือ ส่วนใหญ่มาจากความเร็วท่าทางสัมผัส และค่อยๆ ลดความเร็ว ภาพเคลื่อนไหวจบลงเมื่อความเร็วของภาพเคลื่อนไหวต่ำพอ ทำให้มองไม่เห็นการเปลี่ยนแปลงบนหน้าจออุปกรณ์

วันที่
รูปที่ 1 ภาพเคลื่อนไหวแบบสะบัด

หากต้องการดูข้อมูลเกี่ยวกับหัวข้อที่เกี่ยวข้อง โปรดอ่านคำแนะนำต่อไปนี้

เพิ่มไลบรารี AndroidX

หากต้องการใช้ภาพเคลื่อนไหวที่อิงตามฟิสิกส์ คุณต้องเพิ่มไลบรารี AndroidX ลงในโปรเจ็กต์ ดังนี้

  1. เปิดไฟล์ build.gradle สำหรับโมดูลแอป
  2. เพิ่มไลบรารี 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 ต่อวินาทีถึงพิกเซลต่อวินาทีใน Spring Animation

หากต้องการตั้งค่าความเร็ว ให้เรียกเมธอด setStartVelocity() และส่งผ่าน ความเร็วในหน่วยพิกเซลต่อวินาที เมธอดแสดงออบเจ็กต์การสะบัดบน ซึ่งมีการตั้งค่าความเร็วไว้

หมายเหตุ: ใช้เมนู GestureDetector.OnGestureListener และ VelocityTracker คลาสสำหรับเรียกข้อมูลและประมวลผล ความเร็วของท่าทางแตะสัมผัสตามลำดับ

ตั้งค่าช่วงค่าของภาพเคลื่อนไหว

คุณกำหนดค่าต่ำสุดและสูงสุดของภาพเคลื่อนไหวได้เมื่อต้องการ จำกัดค่าพร็อพเพอร์ตี้ให้อยู่ในบางช่วง การควบคุมช่วงนี้คือ มีประโยชน์อย่างยิ่งเมื่อคุณสร้างภาพเคลื่อนไหวให้กับคุณสมบัติที่มีลักษณะเฉพาะ เช่น อัลฟา (จาก 0 ถึง 1)

หมายเหตุ: เมื่อค่าของภาพเคลื่อนไหวแบบสะบัดมาถึงจุด ค่าต่ำสุดหรือสูงสุด ภาพเคลื่อนไหวก็จะสิ้นสุด

หากต้องการตั้งค่าต่ำสุดและสูงสุด ให้เรียกใช้ setMinValue() และ setMaxValue() เมธอดตามลำดับ ทั้ง 2 วิธีจะแสดงออบเจ็กต์ภาพเคลื่อนไหวที่คุณกำหนดค่าไว้

ตั้งค่าอุปสรรค

เมธอด setFriction() ช่วยให้คุณเปลี่ยนภาพเคลื่อนไหว อุปสรรค คะแนนดังกล่าวจะกำหนดความเร็วที่ลดลงในภาพเคลื่อนไหว

หมายเหตุ: หากคุณไม่ได้ตั้งค่าอุปสรรคในตอนต้นของ ภาพเคลื่อนไหว ภาพเคลื่อนไหวจะใช้ค่าความติดขัดเริ่มต้นเป็น 1

เมธอดจะแสดงออบเจ็กต์ที่มีภาพเคลื่อนไหวใช้ค่าการเสียดสีที่คุณ ให้ไว้

โค้ดตัวอย่าง

ตัวอย่างด้านล่างแสดงการสะบัดแนวนอน ความเร็วที่บันทึกจาก ตัวติดตามความเร็วคือ velocityX และขอบเขตการเลื่อนคือ ตั้งค่าเป็น 0 และ max Scroll ความติดขัดตั้งค่าไว้ที่ 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 พิกเซล