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

ทรัพยากรภาพเคลื่อนไหวสามารถกำหนดภาพเคลื่อนไหว 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 เพื่ออำนวยความสะดวก โค้ดต่อไปนี้แสดงวิธีดำเนินการ

KotlinJava
val set: AnimatorSet = AnimatorInflater.loadAnimator(myContext, R.animator.property_animator)
   
.apply {
        setTarget
(myObject)
        start
()
   
}
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 และ เริ่มภาพเคลื่อนไหว

KotlinJava
val image: ImageView = findViewById(R.id.image)
val hyperspaceJump: Animation = AnimationUtils.loadAnimation(this, R.anim.hyperspace_jump)
image
.startAnimation(hyperspaceJump)
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 จากนั้นเล่นภาพเคลื่อนไหว

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

val rocketAnimation = rocketImage.background
if (rocketAnimation is Animatable) {
    rocketAnimation
.start()
}
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage
.setBackgroundResource(R.drawable.rocket_thrust);

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