วิธีสลับกิจกรรมที่ไม่มีภาพเคลื่อนไหวใน Android


165

ฉันจะใช้การตั้งค่าสถานะ Intent อย่างถูกต้องFLAG_ACTIVITY_NO_ANIMATIONในไฟล์ AndroidManifest ได้อย่างไร ฉันคิดว่าปัญหาของฉันเล็กน้อย แต่ฉันไม่สามารถหาตัวอย่างหรือวิธีแก้ปัญหาที่ดีได้

    <intent-filter>
        <data android:name="android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION" />
    </intent-filter>

อย่างไรก็ตามไม่มีการรายงานข้อผิดพลาดโดย compliator แต่dataไม่ถูกต้อง ฉันต้องการปิดการใช้งานภาพเคลื่อนไหวในกรณีที่สลับระหว่างกิจกรรม ฉันสามารถใช้getWindow().setWindowAnimations(0);onCreate หรือ onResume แทนได้ แต่การใช้ flag เป็นวิธีที่ดีกว่าใช่ไหม

ฉันยังสามารถใช้ในรหัส:

    Intent intent = new Intent(v.getContext(), newactivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    getContext().startActivity(intent);

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


ฉันได้พบกับความต้องการใช้ธีม - โดยกำหนดป้อนออกจากภาพเคลื่อนไหวสำหรับกิจกรรมหรือแอปพลิเคชันทั้งหมด มีใครให้ข้อมูลเพิ่มเติมกับฉันได้ไหม
woyaru

คำตอบ:


269

คุณสามารถสร้างสไตล์

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

และตั้งเป็นธีมสำหรับกิจกรรมของคุณในรายการ:

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

คุณยังสามารถกำหนดสไตล์เพื่อระบุรายการที่กำหนดเองและออกจากภาพเคลื่อนไหว http://developer.android.com/reference/android/R.attr.html#windowEnterAnimation


ขอขอบคุณมันใช้งานได้ดีโดยเฉพาะอย่างยิ่งสำหรับกิจกรรมที่มีธีมโปร่งใส / กล่องโต้ตอบที่แยกออกจากเนื้อหาล่าสุดด้วยความผูกพันของงานที่แตกต่าง หากปราศจากสิ่งนี้อนิเมชั่นยังคงแสดงผลที่แปลกประหลาดอย่างมากต่อการเปิดกล่องโต้ตอบ!
3c71

ดูเหมือนว่าจะใช้งานไม่ได้กับ Lollipop / Android 5.0 อีกต่อไป?
kenyee

ฉันมี Android 5 และใช้งานได้สำหรับฉัน สไตล์แอพของฉันดูเหมือนว่านี้: <style name = "AppTheme" parent = "Theme.AppCompat.Light.DarkActionBar"> <item name = "android: windowAnimationStyle"> @ null </item> </style>
eatyourgreens

ทำงานได้อย่างสมบูรณ์ใน 6.0 ด้วย เคล็ดลับที่ดี ตามที่ฉันถามด้านล่างฉันสงสัยว่าจะปิดใช้งานภาพเคลื่อนไหวที่เกิดขึ้นได้อย่างไรเมื่อ* เปิดตัวแอปเป็นครั้งแรก ... มีวิธีหรือไม่!
Fattie

5
จะล้มเหลวหากคุณขยาย AppCompatActivity
Mike6679

191

หากบริบทของคุณเป็นกิจกรรมที่คุณสามารถเรียกoverridePendingTransition :

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

ดังนั้นโดยทางโปรแกรม:

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

เป็นไปได้ที่จะทำผ่าน adb ด้วยหรือไม่
นักพัฒนา android

@TalAngel the overridePendingTransitionถูกเพิ่มเข้ามาในระดับ API 5 ดังนั้นจึงไม่สามารถใช้งานได้กับ "Android" ทุกรุ่น แต่ฉันเดาว่าคุณกำหนดเป้าหมายระดับ API ที่สูงขึ้นแล้ว 5
Bruno Bieri

43

ลองรหัสนี้

this.startActivity(new Intent(v.getContext(), newactivity.class).addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION));

1
สิ่งนี้จะช่วยได้จริงๆเมื่อเริ่มกิจกรรมจากบริการ
DearDhruv

24

คุณสามารถทำสิ่งนี้ในกิจกรรมทั้งหมดที่คุณไม่ต้องการเปลี่ยนจาก:

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

ฉันชอบวิธีนี้เพราะคุณไม่ต้องยุ่งกับสไตล์ของกิจกรรมของคุณ


เคล็ดลับที่ดี ฉันสงสัยว่าจะปิดใช้งานภาพเคลื่อนไหวที่เกิดขึ้นได้อย่างไรเมื่อ* เปิดตัวแอปเป็นครั้งแรก ... มีวิธีหรือไม่!
Fattie

@Fattie แทนที่เมธอด onStart () ของกิจกรรมการเรียกใช้ของคุณและวางรหัสเดียวกันในนั้น
Jawad Adil

5

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

Android, วิธีการปิดการใช้งานผลกระทบ 'ลบ' เมื่อเริ่มกิจกรรมใหม่?


4

นี่เป็นวิธีแก้ปัญหาแบบหนึ่งเที่ยวบินที่ใช้งานได้ดีอย่างminSdkVersion 14ที่คุณควรใส่ไว้ในตัวres/styles.xml:

<item name="android:windowAnimationStyle">@null</item>

ชอบมาก:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        ...
        <item name="android:windowAnimationStyle">@null</item>
    </style>
    ...
</resources>

ไชโย!


3

บรรทัดในสไตล์ของชุดรูปแบบทำงานได้ดี แต่จะแทนที่ภาพเคลื่อนไหวด้วยหน้าจอสีขาว โดยเฉพาะอย่างยิ่งในโทรศัพท์ที่ช้ากว่า - มันน่ารำคาญจริงๆ ดังนั้นหากคุณต้องการเปลี่ยนทันที - คุณสามารถใช้สิ่งนี้ในสไตล์ของธีม:

<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowDisablePreview">true</item>

2

สร้าง android ของคุณเองด้วยสไตล์: ธีม

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

จากนั้นให้ใช้อย่างชัดแจ้งเช่นนี้:

<activity android:name=".MainActivity"
    android:theme="@style/noAnimationStyle">
</activity>

0

หลังจากเริ่มเจตนาคุณสามารถใช้รหัสนี้:

Intent intent = new Intent(Activity1.this, Activity2.class);
overridePendingTransition(0, 0);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);

หากใช้งานเจตนาจะทำงานโดยไม่มีภาพเคลื่อนไหวหรือการเปลี่ยน

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