จะให้ภาพเคลื่อนไหวเมื่อเรียกกิจกรรมอื่นใน Android ได้อย่างไร


115

ฉันมีสองกิจกรรม A และ B ฉันต้องการให้แอนิเมชั่นลดขนาดเมื่อกิจกรรม A เรียก B และขยายภาพเคลื่อนไหวให้ใหญ่ที่สุดเมื่อกิจกรรม B เรียก A ฉันไม่ต้องการไฟล์ xml ของแอนิเมชั่นสำหรับสิ่งนี้

เมื่อเราเรียกกิจกรรมอื่นใน Android มันจะให้ภาพเคลื่อนไหวเริ่มต้นจากนั้นเรียกว่าภาพเคลื่อนไหวลดขนาด

สิ่งที่ฉันต้องการคือไม่ควรเกิดภาพเคลื่อนไหวเริ่มต้นและภาพเคลื่อนไหวที่ฉันต้องการควรเกิดขึ้น

เราสามารถให้ภาพเคลื่อนไหวเมื่อเรียกใช้กิจกรรมอื่นได้หรือไม่?

คำตอบ:


144

ตั้งแต่ API 16 คุณสามารถจัดหาบันเดิลตัวเลือกกิจกรรมเมื่อเรียกใช้Context.startActivity (Intent, Bundle)หรือเมธอดที่เกี่ยวข้อง สร้างขึ้นผ่านตัวสร้างActivityOptions :

Intent myIntent = new Intent(context, MyActivity.class);
ActivityOptions options = 
   ActivityOptions.makeCustomAnimation(context, R.anim.fade_in, R.anim.fade_out);
context.startActivity(myIntent, options.toBundle());

อย่าลืมตรวจสอบวิธีการอื่น ๆ ของตัวสร้าง ActivityOptions และActivityOptionsCompatหากคุณใช้ไลบรารีสนับสนุน



API 5+:

สำหรับแอปที่กำหนดเป้าหมาย API ระดับ 5+ มีoverridePendingTransitionวิธีกิจกรรม ใช้รหัสทรัพยากรสองรายการสำหรับภาพเคลื่อนไหวขาเข้าและขาออก รหัสของ0จะปิดใช้งานภาพเคลื่อนไหว โทรทันทีหลังการstartActivityโทร

เช่น:

startActivity(new Intent(this, MyActivity.class));
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

API 3+:

คุณสามารถป้องกันไม่ให้ภาพเคลื่อนไหวเริ่มต้น (เลื่อนเข้าจากด้านขวา) พร้อมกับIntent.FLAG_ACTIVITY_NO_ANIMATIONธงในเจตนาของคุณ

เช่น:

Intent myIntent = new Intent(context, MyActivity.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
context.startActivity(myIntent);

จากนั้นในกิจกรรมของคุณคุณจะต้องระบุภาพเคลื่อนไหวของคุณเอง

นอกจากนี้ยังใช้ได้กับ 1.5 API (ระดับ 3)


4
คุณหมายความว่าอย่างไรเมื่อคุณพูดว่า "ระบุภาพเคลื่อนไหวของคุณเอง" คุณจะทำอย่างไร? ขอบคุณ!
pqn

ฉันมีคำถามเดียวกัน อาจเป็นในภาพเคลื่อนไหวเริ่มต้นใน onResume และ onPause
Tima

มีวิธีใช้ Animator แทนไหม
นักพัฒนา android

คุณสามารถใช้สิ่งเดียวกันนี้ได้หลังจากโทรเสร็จ ()!
thiagolr

ไม่ได้R.anim.fade_inยังคงเป็นภาพเคลื่อนไหวไฟล์ xml ที่เราคิดว่าจะมีในres\anim ?
Alex Jolig

78

คุณต้องใช้เมธอด OverridePendingTransition เพื่อให้บรรลุซึ่งอยู่ในไฟล์ ระดับกิจกรรม ภาพเคลื่อนไหวตัวอย่างในโฟลเดอร์ res / anim ของตัวอย่าง apidemos ตรวจสอบ. มากกว่าการตรวจสอบการสาธิตในApiDemos / แอป / กิจกรรม / ภาพเคลื่อนไหว

ตัวอย่าง:

@Override
public void onResume(){
    // TODO LC: preliminary support for views transitions
    this.overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left);
}

1
ขอบคุณสำหรับการตอบกลับ. เมธอด overridePendingTransition ได้รับการสนับสนุนจาก API ระดับ 5 และฉันต้องการให้แอปพลิเคชันได้รับการสนับสนุนจาก Android 1.5 มีวิธีอื่นอีกไหมในการให้ภาพเคลื่อนไหวจากกิจกรรมหนึ่งไปยังอีกกิจกรรมหนึ่ง
sunil

5
! น่ากลัว นี้เป็นจำนวนมากสนุกที่จะเล่นด้วย
บางคน

@sunil ฉันมี quetion เหมือนของคุณคุณสามารถแก้ปัญหาได้หรือไม่ภาพเคลื่อนไหวด้วย api ระดับ 3 หรือ 4 (ไม่ใช่ 5)
Dr.jacky

การเก็บรหัสภาพเคลื่อนไหวใน onResume () จะทำให้ภาพเคลื่อนไหวเล่นเมื่อผู้ใช้ออกไปนอกแอปและกลับมา ไม่เหมาะในหลาย ๆ แอพ
Vihaan Verma

ฉันต้องการเพิ่มsuper.onResume();กำลังได้รับ: "android.util.SuperNotCalledException: กิจกรรม {com.abc.MyActivity} ไม่ได้โทรไปยัง super.onResume ()"
Gene Bo


3

Jelly Bean เพิ่มการสนับสนุนสำหรับสิ่งนี้ด้วยเมธอดActivityOptions.makeCustomAnimation () แน่นอนว่าเนื่องจากเป็นเพียง Jelly Bean เท่านั้นจึงค่อนข้างไร้ค่าสำหรับวัตถุประสงค์ในทางปฏิบัติ


5
มันจะไม่ไร้ค่าอีกต่อไป :)
Greg Ennis

ใช้ActivityOptionsCompatหากคุณกำหนดเป้าหมายไว้ล่วงหน้า JellyBean
Thuy Trinh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.