ปิดการใช้งานภาพเคลื่อนไหวสไลด์กิจกรรมเมื่อเปิดกิจกรรมใหม่หรือไม่


140

ฉันมีกิจกรรมที่เปิดตัวกิจกรรมอื่นโดยคลิกปุ่ม ตามค่าเริ่มต้นสำหรับ Android เวอร์ชันใหม่ของระบบปฏิบัติการระบบปฏิบัติการจะเคลื่อนไหวกิจกรรมใหม่ที่เลื่อนจากขวาไปซ้าย

มีวิธีปิดใช้งานภาพเคลื่อนไหวนี้หรือไม่? ฉันแค่ต้องการให้กิจกรรมใหม่ปรากฏโดยไม่มีการเคลื่อนไหวใด ๆ

คำตอบ:


190

การFLAG_ACTIVITY_NO_ANIMATIONตั้งค่าสถานะทำงานได้ดีสำหรับการปิดใช้งานภาพเคลื่อนไหวเมื่อเริ่มต้นกิจกรรม

หากต้องการปิดใช้งานภาพเคลื่อนไหวที่คล้ายกันที่ถูกเรียกเมื่อเรียกfinish()ใช้กิจกรรมนั่นคือภาพเคลื่อนไหวเลื่อนจากขวาไปซ้ายแทนคุณสามารถโทรoverridePendingTransition(0, 0)หลังจากโทรfinish()แล้วภาพเคลื่อนไหวถัดไปจะไม่รวมอยู่

นอกจากนี้ยังทำงานในในการเคลื่อนไหวถ้าคุณโทรหลังจากโทรoverridePendingTransition(0, 0)startActivity(...)


9
โปรดทราบว่าFLAG_ACTIVITY_NO_ANIMATIONและoverridePendingTransitionเป็นทั้ง API ระดับ 5+ เท่านั้น
azdev

สิ่งนี้ไม่ได้ช่วยเมื่อกลับจากกิจกรรมในการกดปุ่มย้อนกลับ
Yar

4
คุณคือสุดยอด overridePendingTransition (0, 0) -> เป็นเหมือนเทพ มันจะแทนที่ภาพเคลื่อนไหว Finish () เท่านั้น แต่ไม่ใช่ภาพเคลื่อนไหวที่ถูกทริกเกอร์เมื่อกลับมาทำงานต่อก่อนหน้านี้อีกครั้ง
Philipp Jahoda

1
ฉันไม่ชอบคำตอบนี้เพราะไม่ครอบคลุมการเปลี่ยนที่เกิดจากการกดซอฟต์คีย์ 'back' OP ถามว่าจะ 'ปิดใช้งาน' ภาพเคลื่อนไหวไม่ใช่ 'บอกให้เลือกแอปไม่เล่น'
1owk3y

3
หากคุณต้องการปิดการใช้งานหรือแทนที่ภาพเคลื่อนไหว "ย้อนกลับ" เช่นกันให้แทนที่วิธีเสร็จสิ้น () ในกิจกรรมของคุณและวางสายนั้นไว้ในนั้นพร้อมกับเรียกไปยัง super.finish () แก้ไขปัญหา.
Grishka

171

IMHO คำตอบนี้ที่นี่แก้ปัญหาด้วยวิธีที่หรูหราที่สุด ..

นักพัฒนาควรสร้างสไตล์ ,

<style name="noAnimTheme" parent="android:Theme">
  <item name="android:windowAnimationStyle">@null</item>
</style>

จากนั้นให้ตั้งค่าเป็นรายการสำหรับกิจกรรมหรือแอปพลิเคชันทั้งหมด

<activity android:name=".ui.ArticlesActivity" android:theme="@style/noAnimTheme">
</activity>

Voila! ดีและง่าย ..

โปรดให้เครดิต ps แก่ผู้เขียนต้นฉบับ ..


1
มันไม่ได้ทำงานให้กลับและจะเปลี่ยนรูปลักษณ์ของแถบชื่อเรื่อง (ก็จะทำให้มันเล็ก) ...
มาเร็ค

แน่ใจหรือไม่ว่าคุณไม่ได้เพิ่มคุณสมบัติอื่น ๆ อย่างมีสไตล์ทำให้ไม่มีใครได้รายงานเรื่องนี้ "เอฟเฟ็กต์" เอ่ยถึง ..
Ewoks

สำหรับการอ้างอิงนี่อาจทำให้เกิดปัญหาในลำดับชั้นมุมมองที่คุณต้องการ RequestWindowFeature ()
Martin Marconcini

จะดีถ้าคุณทำรายละเอียดเล็กน้อยดังนั้นเราจึงหลีกเลี่ยงปัญหาที่เป็นไปได้
Ewoks

4
@ Marek ฉันคิดว่าปัญหาของคุณไม่เปลี่ยน parent = "android: Theme" อย่างถูกต้อง คุณควรเปลี่ยนด้วยชุดรูปแบบที่คุณต้องการใช้โดยทั่วไปรหัสนี้จะปิดใช้งานภาพเคลื่อนไหวเฉพาะในชุดรูปแบบ ตัวอย่างเช่นใช้ "Theme.AppCompat.Light.NoActionBar" แทน "android: Theme" และคุณจะได้สิ่งที่ฉันหมายถึง ฉันหวังว่ามันจะช่วย
Recomer

33

ใช้

startActivity(new Intent(FirstActivity.this,SecondActivity.class));

แล้วก็

overridePendingTransition(0, 0);

สิ่งนี้จะหยุดการเคลื่อนไหว


28

ในความคิดของฉันคำตอบที่ดีที่สุดคือการใช้ "overridePendingTransition(0, 0);"

เพื่อหลีกเลี่ยงการเห็นภาพเคลื่อนไหวเมื่อคุณต้องการIntentไปสู่การActivityใช้งาน:

this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);

และไม่เห็นภาพเคลื่อนไหวเมื่อคุณกดปุ่มย้อนกลับonPauseวิธีการแทนที่ในของคุณnewactivity

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}


13

สิ่งนี้ใช้ได้กับฉันเมื่อปิดใช้งานภาพเคลื่อนไหวของกิจกรรมที่เสร็จสิ้นแล้ว

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}

9

ฉันใช้ 4.4.2 และการเรียก overridePendingTransition (0, 0) ใน onCreate () ของกิจกรรมการเรียกใช้จะปิดใช้งานภาพเคลื่อนไหวเริ่มต้น (การเรียก overridePendingTransition (0, 0) ทันทีหลังจาก startActivity () ไม่ทำงาน) ดังที่ระบุไว้ในคำตอบอื่นการโทร overridePendingTransition (0, 0) หลังจากเสร็จสิ้น () จะปิดใช้งานภาพเคลื่อนไหวการปิด

Btw ฉันพบว่าการตั้งค่าสไตล์ด้วย "android: windowAnimationStyle"> @ null (มีคำตอบอื่นที่กล่าวถึงที่นี่) ทำให้เกิดข้อผิดพลาดเมื่อกิจกรรมการเปิดตัวของฉันพยายามตั้งชื่อแถบแอ็คชัน การดีบักเพิ่มเติมฉันค้นพบว่าสิ่งนี้ทำให้หน้าต่าง


1
สิ่งที่เกี่ยวกับการประเมินผล? กิจกรรมเดี่ยวชั้นนำและทุกสิ่งที่
Lassi Kinnunen

7

FLAG_ACTIVITY_NO_ANIMATION อาจใช้งานได้ แต่ไม่ได้ทำการหลอกลวงสำหรับฉันเมื่อรวมกับ FLAG_ACTIVITY_CLEAR_TASK และ FLAG_ACTIVITY_NEW_TASK เห็นได้ชัดว่าฉันเห็นภาพเคลื่อนไหวสำหรับการสร้างงานใหม่ด้วยกองกิจกรรมใหม่ในขณะที่ฉันนำทางไปยังมุมมองระดับบนสุดด้านอื่น

สิ่งที่ทำงานที่นี่กำลังเรียก "overridePendingTransition (0, 0);" ทันทีหลังจากโทร startActivity () หรือ onPause () ทั้งสองวิธีทำงานได้ แต่การทำหลังจาก startActivity () ทำให้ฉันสามารถควบคุมได้มากขึ้นเมื่อฉันต้องการภาพเคลื่อนไหวและเมื่อฉันไม่ทำ


2

overridependingtransitionผมมีปัญหาในการรับหน้าจอสีดำคล้ายกันปรากฏบนเลื่อนการเปลี่ยนแปลงจากกิจกรรมหนึ่งไปยังอีกที่ใช้ และฉันทำตามวิธีด้านล่างและใช้งานได้

1) สร้างnoanim.xmlในโฟลเดอร์ภาพเคลื่อนไหว

<?xml version="1.0" encoding="utf-8"?>
<translate 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="0%p"
    android:toYDelta="0%p" />

และใช้

overridePendingTransition(R.drawable.lefttorightanim, R.anim.noanim);

พารามิเตอร์แรกเป็นภาพเคลื่อนไหวต้นฉบับของฉันและพารามิเตอร์ที่สองซึ่งเป็นภาพเคลื่อนไหวทางออกเป็นภาพเคลื่อนไหวจำลองของฉัน


1

เพื่อหลีกเลี่ยงพื้นหลังสีดำเมื่อเริ่มกิจกรรมแล้วในสแต็คฉันเพิ่ม overridePendingTransition(0,0)ในonStart():

@Override
protected void onStart() {
    overridePendingTransition(0,0);
    super.onStart();

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