แหล่งข้อมูลเกี่ยวกับภาพเคลื่อนไหว

ทรัพยากรภาพเคลื่อนไหวสามารถกำหนดภาพเคลื่อนไหว 1 ใน 2 ประเภทต่อไปนี้

ภาพเคลื่อนไหวของพร็อพเพอร์ตี้
สร้างภาพเคลื่อนไหวโดยการแก้ไขค่าคุณสมบัติของวัตถุในระยะเวลาที่กำหนด ด้วย Animator
ดูภาพเคลื่อนไหว

ภาพเคลื่อนไหวที่คุณใช้กรอบมุมมองภาพเคลื่อนไหวได้มี 2 ประเภท ดังนี้

ภาพเคลื่อนไหวของพร็อพเพอร์ตี้

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

ตำแหน่งที่ตั้งไฟล์:

res/animator/filename.xml
ชื่อไฟล์จะใช้เป็นรหัสทรัพยากร
ประเภทข้อมูลทรัพยากรที่คอมไพล์:
ตัวชี้แหล่งข้อมูลไปยัง ValueAnimator, ObjectAnimator หรือ AnimatorSet
การอ้างอิงทรัพยากร:
ในโค้ดแบบ Java หรือ Kotlin: R.animator.filename
ใน XML: @[package:]animator/filename
ไวยากรณ์:
<set
  android:ordering=["together" | "sequentially"]>

    <objectAnimator
        android:propertyName="string"
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["restart" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <animator
        android:duration="int"
        android:valueFrom="float | int | color"
        android:valueTo="float | int | color"
        android:startOffset="int"
        android:repeatCount="int"
        android:repeatMode=["restart" | "reverse"]
        android:valueType=["intType" | "floatType"]/>

    <set>
        ...
    </set>
</set>

ไฟล์ต้องมีองค์ประกอบรากเดียว นั่นคือ <set>, <objectAnimator> หรือ <valueAnimator> คุณสามารถ จัดกลุ่มองค์ประกอบภาพเคลื่อนไหวเข้าด้วยกันภายในองค์ประกอบ <set> รวมถึงองค์ประกอบอื่นๆ องค์ประกอบ <set>

องค์ประกอบ:
<set>
คอนเทนเนอร์ที่เก็บองค์ประกอบภาพเคลื่อนไหวอื่นๆ (<objectAnimator>, <valueAnimator> หรือองค์ประกอบ <set> อื่นๆ) นำเสนอ AnimatorSet

คุณระบุแท็ก <set> ที่ฝังเพื่อเพิ่มเติมได้อีก ภาพเคลื่อนไหวของกลุ่ม <set> แต่ละรายการจะกำหนดตัวระบุของตนเองได้ ordering

แอตทริบิวต์:

android:ordering
คีย์เวิร์ด ระบุลำดับการเล่นของภาพเคลื่อนไหวในชุดนี้
ค่าคำอธิบาย
sequentiallyเล่นภาพเคลื่อนไหวในชุดนี้ตามลำดับ
together (ค่าเริ่มต้น)เล่นภาพเคลื่อนไหวในชุดนี้พร้อมกัน
<objectAnimator>
ทำให้คุณสมบัติที่เฉพาะเจาะจงของวัตถุเคลื่อนไหวตามระยะเวลาที่กำหนด นำเสนอ ObjectAnimator

แอตทริบิวต์:

android:propertyName
สตริง ต้องระบุ พร็อพเพอร์ตี้ของออบเจ็กต์ที่ทำให้เคลื่อนไหว โดยอ้างอิงตามชื่อ เช่น คุณสามารถระบุ "alpha" หรือ "backgroundColor" สำหรับออบเจ็กต์ View องค์ประกอบ objectAnimator ไม่แสดง target แต่คุณตั้งค่าออบเจ็กต์ให้เคลื่อนไหวในการประกาศ XML ไม่ได้ คุณต้องทำดังนี้ เพิ่มทรัพยากร XML ของภาพเคลื่อนไหวโดยการเรียก loadAnimator() และเรียก setTarget() เพื่อตั้งค่า ออบเจ็กต์เป้าหมายที่มีพร็อพเพอร์ตี้นี้
android:valueTo
Float, int หรือ color [สี] ต้องระบุ ค่าที่พร็อพเพอร์ตี้ภาพเคลื่อนไหวสิ้นสุด มีการแสดงสี เป็นตัวเลขฐานสิบหก 6 หลัก เช่น #333333
android:valueFrom
Float, int หรือ color [สี] ค่าที่พร็อพเพอร์ตี้ภาพเคลื่อนไหวเริ่มต้น หากไม่ ภาพเคลื่อนไหวจะเริ่มต้นที่ค่าที่ได้รับจากเมธอด get ของพร็อพเพอร์ตี้ มีการแสดงสี เป็นตัวเลขฐานสิบหก 6 หลัก เช่น #333333
android:duration
int เวลาเป็นมิลลิวินาทีของภาพเคลื่อนไหว ค่าเริ่มต้นคือ 300 มิลลิวินาที
android:startOffset
int จำนวนมิลลิวินาทีที่ภาพเคลื่อนไหวล่าช้าหลังจาก มีการเรียก start()
android:repeatCount
int จำนวนครั้งที่จะแสดงภาพเคลื่อนไหวซ้ำ ตั้งค่าเป็น "-1" เป็นไม่จำกัด แสดงซ้ำหรือเป็นจำนวนเต็มบวก เช่น ค่า "1" หมายความว่าภาพเคลื่อนไหว จะแสดงซ้ำหลังจากการเล่นภาพเคลื่อนไหวครั้งแรก ภาพเคลื่อนไหวจึงจะเล่นซ้ำ ได้ 2 ครั้ง ค่าเริ่มต้นคือ "0" ซึ่งหมายความว่าไม่มีการกล่าวซ้ำๆ
android:repeatMode
int ลักษณะการทํางานของภาพเคลื่อนไหวเมื่อถึงจุดสิ้นสุดของภาพเคลื่อนไหว android:repeatCount ต้องตั้งค่าเป็นจำนวนเต็มบวกหรือ "-1" เพื่อให้แอตทริบิวต์นี้มีผล ตั้งค่าเป็น "reverse" เพื่อกลับทิศทางของภาพเคลื่อนไหวด้วยการทำซ้ำแต่ละครั้ง หรือ "restart" เพื่อแสดงภาพเคลื่อนไหว วนซ้ำตั้งแต่ต้นทุกครั้ง
android:valueType
คีย์เวิร์ด อย่าระบุแอตทริบิวต์นี้หากค่าเป็นสี เฟรมเวิร์กภาพเคลื่อนไหวจะจัดการเรื่องสีโดยอัตโนมัติ
ค่าคำอธิบาย
intTypeระบุว่าค่าที่เคลื่อนไหวเป็นจำนวนเต็ม
floatType (ค่าเริ่มต้น)ระบุว่าค่าที่เคลื่อนไหวเป็นแบบลอย
<animator>
แสดงภาพเคลื่อนไหวตามระยะเวลาที่กำหนด แสดง ValueAnimator

แอตทริบิวต์:

android:valueTo
Float, int หรือ color [สี] ต้องระบุ ค่าที่ภาพเคลื่อนไหวสิ้นสุด มีการแสดงสี เป็นตัวเลขฐานสิบหก 6 หลัก เช่น #333333
android:valueFrom
Float, int หรือ color [สี] ต้องระบุ ค่าที่ภาพเคลื่อนไหวเริ่มต้น มีการแสดงสี เป็นตัวเลขฐานสิบหก 6 หลัก เช่น #333333
android:duration
int เวลาเป็นมิลลิวินาทีของภาพเคลื่อนไหว ค่าเริ่มต้นคือ 300 มิลลิวินาที
android:startOffset
int จำนวนมิลลิวินาทีที่ภาพเคลื่อนไหวล่าช้าหลังจาก มีการเรียก start()
android:repeatCount
int จำนวนครั้งที่จะแสดงภาพเคลื่อนไหวซ้ำ ตั้งค่าเป็น "-1" เป็นไม่จำกัด แสดงซ้ำหรือเป็นจำนวนเต็มบวก เช่น ค่า "1" หมายความว่าภาพเคลื่อนไหว จะแสดงซ้ำหลังจากการเล่นภาพเคลื่อนไหวครั้งแรก ภาพเคลื่อนไหวจึงจะเล่นซ้ำ ได้ 2 ครั้ง ค่าเริ่มต้นคือ "0" ซึ่งหมายความว่าไม่มีการกล่าวซ้ำๆ
android:repeatMode
int ลักษณะการทํางานของภาพเคลื่อนไหวเมื่อถึงจุดสิ้นสุดของภาพเคลื่อนไหว android:repeatCount ต้องตั้งค่าเป็นจำนวนเต็มบวกหรือ "-1" เพื่อให้แอตทริบิวต์นี้มีผล ตั้งค่าเป็น "reverse" เพื่อกลับทิศทางของภาพเคลื่อนไหวด้วยการทำซ้ำแต่ละครั้ง หรือ "restart" เพื่อแสดงภาพเคลื่อนไหว วนซ้ำตั้งแต่ต้นทุกครั้ง
android:valueType
คีย์เวิร์ด อย่าระบุแอตทริบิวต์นี้หากค่าเป็นสี เฟรมเวิร์กภาพเคลื่อนไหวจะจัดการเรื่องสีโดยอัตโนมัติ
ค่าคำอธิบาย
intTypeระบุว่าค่าที่เคลื่อนไหวเป็นจำนวนเต็ม
floatType (ค่าเริ่มต้น)ระบุว่าค่าที่เคลื่อนไหวเป็นแบบลอย
ตัวอย่าง:

ไฟล์ XML ที่บันทึกไว้ที่ res/animator/property_animator.xml:

<set android:ordering="sequentially">
    <set>
        <objectAnimator
            android:propertyName="x"
            android:duration="500"
            android:valueTo="400"
            android:valueType="intType"/>
        <objectAnimator
            android:propertyName="y"
            android:duration="500"
            android:valueTo="300"
            android:valueType="intType"/>
    </set>
    <objectAnimator
        android:propertyName="alpha"
        android:duration="500"
        android:valueTo="1f"/>
</set>

หากต้องการเรียกใช้ภาพเคลื่อนไหวนี้ ให้เพิ่มทรัพยากร XML ในโค้ดให้สูงเกินจริงเป็นออบเจ็กต์ AnimatorSet จากนั้นตั้งค่าออบเจ็กต์เป้าหมายสำหรับภาพเคลื่อนไหวทั้งหมด ก่อนเริ่มตั้งค่าภาพเคลื่อนไหว การเรียกใช้ setTarget() จะตั้งค่าออบเจ็กต์เป้าหมายเดียวสำหรับผู้เผยแพร่โฆษณาย่อยทั้งหมดของ AnimatorSet เพื่ออำนวยความสะดวก โค้ดต่อไปนี้แสดงวิธีดำเนินการ

Kotlin

val set: AnimatorSet = AnimatorInflater.loadAnimator(myContext, R.animator.property_animator)
    .apply {
        setTarget(myObject)
        start()
    }

Java

AnimatorSet set = (AnimatorSet) AnimatorInflater.loadAnimator(myContext,
    R.animator.property_animator);
set.setTarget(myObject);
set.start();
ดูเพิ่มเติม

ดูภาพเคลื่อนไหว

เฟรมเวิร์กภาพเคลื่อนไหวแบบมุมมองรองรับทั้งภาพเคลื่อนไหวแบบ Tween และแบบเฟรมต่อเฟรม ซึ่งทั้ง 2 แบบประกาศไว้ ในรูปแบบ XML ส่วนต่อไปนี้จะอธิบายวิธีใช้ทั้ง 2 วิธี

แอนิเมชันในช่วง Tween

ภาพเคลื่อนไหวที่กำหนดไว้ใน XML ซึ่งทำการเปลี่ยนภาพในกราฟิก เช่น การหมุน การค่อยๆ เลือนหายไป เคลื่อนไหว และยืดเส้นยืดสาย

ตำแหน่งที่ตั้งไฟล์:

res/anim/filename.xml
ชื่อไฟล์จะใช้เป็นรหัสทรัพยากร
ประเภทข้อมูลทรัพยากรที่คอมไพล์:
ตัวชี้แหล่งข้อมูลไปยัง Animation
การอ้างอิงทรัพยากร:
ใน Java: R.anim.filename
ใน XML: @[package:]anim/filename
ไวยากรณ์:
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@[package:]anim/interpolator_resource"
    android:shareInterpolator=["true" | "false"] >
    <alpha
        android:fromAlpha="float"
        android:toAlpha="float" />
    <scale
        android:fromXScale="float"
        android:toXScale="float"
        android:fromYScale="float"
        android:toYScale="float"
        android:pivotX="float"
        android:pivotY="float" />
    <translate
        android:fromXDelta="float"
        android:toXDelta="float"
        android:fromYDelta="float"
        android:toYDelta="float" />
    <rotate
        android:fromDegrees="float"
        android:toDegrees="float"
        android:pivotX="float"
        android:pivotY="float" />
    <set>
        ...
    </set>
</set>

ไฟล์ต้องมีองค์ประกอบรากเดียว นั่นคือ <alpha> <scale> <translate> องค์ประกอบ <rotate> หรือ <set> ที่เก็บรักษา กลุ่ม (หรือกลุ่ม) ขององค์ประกอบภาพเคลื่อนไหวอื่นๆ (รวมถึงองค์ประกอบ <set> ที่ฝังอยู่)

องค์ประกอบ:
<set>
คอนเทนเนอร์ที่เก็บองค์ประกอบภาพเคลื่อนไหวอื่นๆ (<alpha>, <scale>, <translate> <rotate>) หรือองค์ประกอบ <set> อื่นๆ แสดง AnimationSet

แอตทริบิวต์:

android:interpolator
แหล่งข้อมูลตัวแทรกแซง Interpolator ที่จะใช้กับภาพเคลื่อนไหว ค่าต้องอ้างอิงไปยังทรัพยากรที่ระบุตัวกำหนดช่วง ไม่ใช่ชื่อคลาสตัวอินเตอร์โพล มีตัวกำหนดระยะเวลาเริ่มต้น ทรัพยากรที่มีจากแพลตฟอร์ม หรือคุณสามารถสร้างทรัพยากรอินเตอร์โพลของคุณเอง ดูข้อมูลเพิ่มเติมเกี่ยวกับเครื่องมือตีความในการสนทนาต่อไปนี้
android:shareInterpolator
บูลีน "true"หากต้องการแชร์ตัวกำหนดช่วงเดียวกันให้กับเด็กทั้งหมด จากองค์ประกอบเหล่านี้
<alpha>
ภาพเคลื่อนไหวแบบเฟดอินหรือเฟดเอาต์ แสดง AlphaAnimation

แอตทริบิวต์:

android:fromAlpha
ลอย ออฟเซ็ตความทึบแสงเริ่มต้น โดย 0.0 คือโปร่งใสและ 1.0 ไม่ชัดเจน
android:toAlpha
ลอย ออฟเซ็ตความทึบแสงสิ้นสุด โดยที่ 0.0 คือโปร่งใสและ 1.0 ไม่ชัดเจน

สำหรับแอตทริบิวต์เพิ่มเติมที่ <alpha> รองรับ โปรดดูข้อมูลอ้างอิงคลาสสำหรับ Animation ซึ่งมีแอตทริบิวต์ XML ที่รับช่วงมาจากองค์ประกอบนี้

<scale>
ภาพเคลื่อนไหวที่ปรับขนาด คุณสามารถระบุจุดศูนย์กลางของรูปภาพที่ทำให้ภาพขยายใหญ่ขึ้นได้ ภายนอกหรือด้านในโดยระบุ pivotX และ pivotY ตัวอย่างเช่น หากค่าเหล่านี้ เท่ากับ 0,0 (มุมซ้ายบน) การเติบโตทั้งหมดลดลงและไปทางขวา แสดง ScaleAnimation

แอตทริบิวต์:

android:fromXScale
ลอย เริ่มออฟเซ็ตขนาด X โดยที่ 1.0 ไม่มีการเปลี่ยนแปลง
android:toXScale
ลอย การชดเชยขนาด X ที่ลงท้ายด้วย 1.0 ไม่มีการเปลี่ยนแปลง
android:fromYScale
ลอย เริ่มการชดเชยขนาด Y โดยที่ 1.0 ไม่มีการเปลี่ยนแปลง
android:toYScale
ลอย การชดเชยขนาด Y ที่ลงท้ายด้วย 1.0 ไม่มีการเปลี่ยนแปลง
android:pivotX
ลอย พิกัด X จะคงเดิมเมื่อมีการปรับขนาดวัตถุ
android:pivotY
ลอย พิกัด Y จะยังคงคงที่เมื่อมีการปรับขนาดวัตถุ

สำหรับแอตทริบิวต์เพิ่มเติมที่ <scale> รองรับ โปรดดูข้อมูลอ้างอิงคลาสสำหรับ Animation ซึ่งมีแอตทริบิวต์ XML ที่รับช่วงมาจากองค์ประกอบนี้

<translate>
การเคลื่อนไหวแนวตั้งและ/หรือแนวนอน แสดงถึง TranslateAnimation รองรับแอตทริบิวต์ต่อไปนี้ใน 3 รูปแบบดังกล่าว
  • ค่าตั้งแต่ -100 ถึง 100 ที่ลงท้ายด้วย "%" ซึ่งแสดงเปอร์เซ็นต์ สัมพันธ์กับค่าดังกล่าว
  • ค่าตั้งแต่ -100 ถึง 100 ที่ลงท้ายด้วย "%p" ซึ่งแสดงเปอร์เซ็นต์ที่สัมพันธ์กับ หลัก
  • ค่าจำนวนลอยตัวที่ไม่มีคำต่อท้ายซึ่งระบุค่าสัมบูรณ์

แอตทริบิวต์:

android:fromXDelta
จำนวนทศนิยมหรือเปอร์เซ็นต์ กำลังเริ่มออฟเซ็ต X แสดงเป็นพิกเซลสัมพัทธ์ ไปยังตำแหน่งปกติ เช่น "5" เป็นเปอร์เซ็นต์ที่สัมพันธ์กับความกว้างขององค์ประกอบ เช่น "5%"; หรือเป็นเปอร์เซ็นต์ที่สัมพันธ์กับความกว้างของระดับบนสุด เช่น "5%p"
android:toXDelta
จำนวนทศนิยมหรือเปอร์เซ็นต์ กำลังสิ้นสุดออฟเซ็ต X แสดงเป็นพิกเซลสัมพัทธ์ ไปยังตำแหน่งปกติ เช่น "5" เป็นเปอร์เซ็นต์ที่สัมพันธ์กับความกว้างขององค์ประกอบ เช่น "5%"; หรือเป็นเปอร์เซ็นต์ที่สัมพันธ์กับความกว้างของระดับบนสุด เช่น "5%p"
android:fromYDelta
จำนวนทศนิยมหรือเปอร์เซ็นต์ กำลังเริ่มออฟเซ็ต Y แสดงเป็นพิกเซลสัมพัทธ์ ไปยังตำแหน่งปกติ เช่น "5" เป็นเปอร์เซ็นต์ที่สัมพันธ์กับความสูงขององค์ประกอบ เช่น "5%"; หรือเป็นเปอร์เซ็นต์ที่สัมพันธ์กับความสูงของระดับบนสุด เช่น "5%p"
android:toYDelta
จำนวนทศนิยมหรือเปอร์เซ็นต์ กำลังสิ้นสุดออฟเซ็ต Y แสดงเป็นพิกเซลสัมพัทธ์ ไปยังตำแหน่งปกติ เช่น "5" เป็นเปอร์เซ็นต์ที่สัมพันธ์กับความสูงขององค์ประกอบ เช่น "5%"; หรือเป็นเปอร์เซ็นต์ที่สัมพันธ์กับความสูงของระดับบนสุด เช่น "5%p"

สำหรับแอตทริบิวต์เพิ่มเติมที่ <translate> รองรับ โปรดดูข้อมูลอ้างอิงคลาสสำหรับ Animation ซึ่งมีแอตทริบิวต์ XML ที่รับช่วงมาจากองค์ประกอบนี้

<rotate>
ภาพเคลื่อนไหวแบบหมุน แสดง RotateAnimation

แอตทริบิวต์:

android:fromDegrees
ลอย การเริ่มต้นตำแหน่งเชิงมุม หน่วยเป็นองศา
android:toDegrees
ลอย ตำแหน่งมุมสิ้นสุด หน่วยเป็นองศา
android:pivotX
จำนวนทศนิยมหรือเปอร์เซ็นต์ พิกัด X ของจุดศูนย์กลางการหมุน แสดง เป็นพิกเซลที่สัมพันธ์กับขอบด้านซ้ายของวัตถุ เช่น "5" เป็นเปอร์เซ็นต์สัมพัทธ์ กับขอบด้านซ้ายของวัตถุ เช่น "5%" หรือเป็นเปอร์เซ็นต์เมื่อเทียบกับระดับบนสุด ขอบด้านซ้ายของคอนเทนเนอร์ เช่น "5%p"
android:pivotY
จำนวนทศนิยมหรือเปอร์เซ็นต์ พิกัด Y ของจุดศูนย์กลางการหมุน แสดง เป็นพิกเซลที่สัมพันธ์กับขอบด้านบนของวัตถุ เช่น "5" เป็นเปอร์เซ็นต์สัมพัทธ์ กับขอบด้านบนของวัตถุ เช่น "5%" หรือเป็นเปอร์เซ็นต์เมื่อเทียบกับระดับบนสุด ขอบด้านบนของคอนเทนเนอร์ เช่น "5%p"

สำหรับแอตทริบิวต์เพิ่มเติมที่ <rotate> รองรับ โปรดดูข้อมูลอ้างอิงคลาสสำหรับ Animation ซึ่งมีแอตทริบิวต์ XML ที่รับช่วงมาจากองค์ประกอบนี้

ตัวอย่าง:

ไฟล์ XML ที่บันทึกไว้ที่ res/anim/hyperspace_jump.xml:

<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
    <scale
        android:interpolator="@android:anim/accelerate_decelerate_interpolator"
        android:fromXScale="1.0"
        android:toXScale="1.4"
        android:fromYScale="1.0"
        android:toYScale="0.6"
        android:pivotX="50%"
        android:pivotY="50%"
        android:fillAfter="false"
        android:duration="700" />
    <set
        android:interpolator="@android:anim/accelerate_interpolator"
        android:startOffset="700">
        <scale
            android:fromXScale="1.4"
            android:toXScale="0.0"
            android:fromYScale="0.6"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
        <rotate
            android:fromDegrees="0"
            android:toDegrees="-45"
            android:toYScale="0.0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:duration="400" />
    </set>
</set>

รหัสแอปพลิเคชันต่อไปนี้ใช้ภาพเคลื่อนไหวกับ ImageView และ เริ่มภาพเคลื่อนไหว

Kotlin

val image: ImageView = findViewById(R.id.image)
val hyperspaceJump: Animation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump)
image.startAnimation(hyperspaceJump)

Java

ImageView image = (ImageView) findViewById(R.id.image);
Animation hyperspaceJump = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump);
image.startAnimation(hyperspaceJump);
ดูเพิ่มเติม

อินเตอร์โพเลเตอร์

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

ตัวกำกับกลางจะใช้กับองค์ประกอบของภาพเคลื่อนไหวที่มี android:interpolator ค่าที่เป็นตัวอ้างอิงไปยังทรัพยากรตัวกำหนด

ตัวกระทำการประมาณค่าทั้งหมดที่พร้อมใช้งานใน Android เป็นคลาสย่อยของคลาส Interpolator สำหรับคลาสตัวกำหนดแต่ละคลาส Android มีทรัพยากรสาธารณะที่คุณสามารถอ้างอิงเพื่อใช้อินเตอร์โพลเตอร์กับภาพเคลื่อนไหว โดยใช้แอตทริบิวต์ android:interpolator ตารางต่อไปนี้ระบุทรัพยากรที่จะใช้สำหรับตัวกำหนดแต่ละตัว

คลาสอินเตอร์โพเลเตอร์รหัสทรัพยากร
AccelerateDecelerateInterpolator @android:anim/accelerate_decelerate_interpolator
AccelerateInterpolator @android:anim/accelerate_interpolator
AnticipateInterpolator @android:anim/anticipate_interpolator
AnticipateOvershootInterpolator @android:anim/anticipate_overshoot_interpolator
BounceInterpolator @android:anim/bounce_interpolator
CycleInterpolator @android:anim/cycle_interpolator
DecelerateInterpolator @android:anim/decelerate_interpolator
LinearInterpolator @android:anim/linear_interpolator
OvershootInterpolator @android:anim/overshoot_interpolator

คุณใช้แอตทริบิวต์เหล่านี้กับแอตทริบิวต์ android:interpolator ได้โดยทำดังนี้

<set android:interpolator="@android:anim/accelerate_interpolator">
    ...
</set>

ตัวการประมาณค่าที่กำหนดเอง

หากคุณไม่พึงพอใจกับตัวกำหนดอัตราการเปลี่ยนแปลงที่แพลตฟอร์มมีให้ คุณสามารถสร้างทรัพยากรตัวกำหนดได้เองโดยมีแอตทริบิวต์ที่ได้รับการแก้ไข ตัวอย่างเช่น คุณสามารถปรับอัตรา ความเร่งสำหรับAnticipateInterpolatorหรือปรับจำนวน สำหรับ CycleInterpolator วิธีการคือ สร้างทรัพยากรตัวแทรกกลางของคุณเองในไฟล์ XML

ตำแหน่งที่ตั้งไฟล์:

res/anim/filename.xml
ชื่อไฟล์จะใช้เป็นรหัสทรัพยากร
ประเภทข้อมูลทรัพยากรที่คอมไพล์:
ตัวชี้แหล่งข้อมูลไปยังออบเจ็กต์ตัวกำหนดที่เกี่ยวข้อง
การอ้างอิงทรัพยากร:
ใน XML: @[package:]anim/filename
ไวยากรณ์:
<?xml version="1.0" encoding="utf-8"?>
<InterpolatorName xmlns:android="http://schemas.android.com/apk/res/android"
    android:attribute_name="value"
    />

หากคุณไม่ใช้แอตทริบิวต์ใดๆ ตัวกำหนดกลางของคุณจะทำงานในลักษณะเดียวกับ ระบุโดยแพลตฟอร์มตามตารางก่อนหน้านี้

องค์ประกอบ:
สังเกตว่าการติดตั้งใช้งาน Interpolator แต่ละรายการ ที่กำหนดไว้ใน XML มีชื่อที่ขึ้นต้นด้วยตัวอักษรพิมพ์เล็ก

<accelerateDecelerateInterpolator>
อัตราการเปลี่ยนแปลงเริ่มต้นและสิ้นสุดอย่างช้าๆ แต่เพิ่มขึ้นอย่างรวดเร็ว ตรงกลาง

ไม่มีแอตทริบิวต์

<accelerateInterpolator>
อัตราการเปลี่ยนแปลงจะเริ่มต้นอย่างช้าๆ แล้วเพิ่มขึ้นอย่างรวดเร็ว

แอตทริบิวต์:

android:factor
ลอย อัตราความเร่ง ค่าเริ่มต้นคือ 1
<anticipateInterpolator>
การเปลี่ยนแปลงจะเริ่มต้นย้อนกลับ จากนั้นจึงเลื่อนไปข้างหน้า

แอตทริบิวต์:

android:tension
ลอย ปริมาณความตึงเครียดที่ใช้ ค่าเริ่มต้นคือ 2
<anticipateOvershootInterpolator>
การเปลี่ยนแปลงจะเริ่มต้นแบบย้อนกลับ จากนั้นจะเลื่อนไปด้านหน้าและเกินค่าเป้าหมาย จากนั้น จะตัดสินที่ค่าสุดท้าย

แอตทริบิวต์:

android:tension
ลอย ปริมาณความตึงเครียดที่ใช้ ค่าเริ่มต้นคือ 2
android:extraTension
ลอย ปริมาณที่ใช้คูณความตึงเครียด ค่าเริ่มต้นคือ เวอร์ชัน 1.5
<bounceInterpolator>
การเปลี่ยนแปลงจะตีกลับในตอนท้าย

ไม่มีแอตทริบิวต์

<cycleInterpolator>
เล่นภาพเคลื่อนไหวซ้ำตามจำนวนรอบที่ระบุ อัตราการเปลี่ยนแปลงเป็นไปตาม รูปแบบไซนัสซอยด์

แอตทริบิวต์:

android:cycles
จำนวนเต็ม จำนวนรอบ ค่าเริ่มต้นคือ 1
<decelerateInterpolator>
อัตราการเปลี่ยนแปลงเริ่มต้นอย่างรวดเร็ว จากนั้นลดลง

แอตทริบิวต์:

android:factor
ลอย อัตราการลดความเร็ว ค่าเริ่มต้นคือ 1
<linearInterpolator>
อัตราการเปลี่ยนแปลงคงที่

ไม่มีแอตทริบิวต์

<overshootInterpolator>
การเปลี่ยนแปลงเกิดขึ้นด้านหน้าและเกินค่าสุดท้ายแล้วจึงย้อนกลับมา

แอตทริบิวต์:

android:tension
ลอย ปริมาณความตึงเครียดที่ใช้ ค่าเริ่มต้นคือ 2
ตัวอย่าง:

ไฟล์ XML ที่บันทึกไว้ที่ res/anim/my_overshoot_interpolator.xml:

<?xml version="1.0" encoding="utf-8"?>
<overshootInterpolator xmlns:android="http://schemas.android.com/apk/res/android"
    android:tension="7.0"
    />

XML ภาพเคลื่อนไหวนี้ใช้ตัวกั้นกลาง

<scale xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@anim/my_overshoot_interpolator"
    android:fromXScale="1.0"
    android:toXScale="3.0"
    android:fromYScale="1.0"
    android:toYScale="3.0"
    android:pivotX="50%"
    android:pivotY="50%"
    android:duration="700" />

ภาพเคลื่อนไหวของเฟรม

ภาพเคลื่อนไหวที่กำหนดไว้ใน XML ที่แสดงลำดับรูปภาพตามลำดับเหมือนภาพยนตร์

ตำแหน่งที่ตั้งไฟล์:

res/drawable/filename.xml
ชื่อไฟล์จะใช้เป็นรหัสทรัพยากร
ประเภทข้อมูลทรัพยากรที่คอมไพล์:
ตัวชี้แหล่งข้อมูลไปยัง AnimationDrawable
การอ้างอิงทรัพยากร:
ใน Java: R.drawable.filename
ใน XML: @[package:]drawable.filename
ไวยากรณ์:
<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot=["true" | "false"] >
    <item
        android:drawable="@[package:]drawable/drawable_resource_name"
        android:duration="integer" />
</animation-list>
องค์ประกอบ:
<animation-list>
ต้องระบุ ต้องเป็นองค์ประกอบรูท มีอย่างน้อย 1 อย่าง องค์ประกอบ <item>

แอตทริบิวต์:

android:oneshot
บูลีน "true"หากต้องการเล่นภาพเคลื่อนไหว 1 ครั้ง "false" เพื่อวนซ้ำ ภาพเคลื่อนไหว
<item>
ภาพเคลื่อนไหวเพียงเฟรมเดียว ต้องเป็นองค์ประกอบย่อยขององค์ประกอบ <animation-list>

แอตทริบิวต์:

android:drawable
แหล่งข้อมูลที่ถอนออกได้ ภาพที่ถอนออกได้ที่จะใช้สำหรับเฟรมนี้
android:duration
จำนวนเต็ม ระยะเวลาที่จะแสดงเฟรมนี้เป็นมิลลิวินาที
ตัวอย่าง:

ไฟล์ XML ที่บันทึกไว้ที่ res/drawable/rocket_thrust.xml:

<?xml version="1.0" encoding="utf-8"?>
<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/rocket_thrust1" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust2" android:duration="200" />
    <item android:drawable="@drawable/rocket_thrust3" android:duration="200" />
</animation-list>

โค้ดของแอปพลิเคชันต่อไปนี้ตั้งค่าภาพเคลื่อนไหวเป็นพื้นหลังสำหรับ View จากนั้นเล่นภาพเคลื่อนไหว

Kotlin

val rocketImage: ImageView = findViewById(R.id.rocket_image)
rocketImage.setBackgroundResource(R.drawable.rocket_thrust)

val rocketAnimation = rocketImage.background
if (rocketAnimation is Animatable) {
    rocketAnimation.start()
}

Java

ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.drawable.rocket_thrust);

rocketAnimation = rocketImage.getBackground();
if (rocketAnimation instanceof Animatable) {
    ((Animatable)rocketAnimation).start();
}
ดูเพิ่มเติม