วิธีการทำให้ภาพเคลื่อนไหวจางลงในการเปลี่ยนกิจกรรม


89

ฉันกำลังเข้ารหัสเอฟเฟกต์การเปลี่ยนแปลงระหว่างกิจกรรมโลโก้และกิจกรรมหลักของฉัน แต่ฉันมีปัญหาว่าก่อนที่จะหายไปกิจกรรมจะย้ายไปด้านบน:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <alpha
        android:duration="2000"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" >
    </alpha>

</set>

ฉันจะปรับปรุงโค้ดนี้อย่างไรเพื่อให้ได้เอฟเฟกต์หายไปเท่านั้น

คำตอบ:


237

คุณสามารถสร้างไฟล์แอนิเมชั่น. xmlของคุณเองเพื่อทำให้ใหม่ActivityและจางหายไปในปัจจุบันActivity:

fade_in.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
           android:interpolator="@android:anim/accelerate_interpolator"
           android:fromAlpha="0.0" android:toAlpha="1.0"
           android:duration="500" />

fade_out.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
           android:interpolator="@android:anim/accelerate_interpolator"
           android:fromAlpha="1.0" android:toAlpha="0.0"
           android:fillAfter="true"
           android:duration="500" />

ใช้ในรหัสเช่นนั้น: (ภายในของคุณActivity)

Intent i = new Intent(this, NewlyStartedActivity.class);
startActivity(i);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

รหัสข้างต้นจะทำให้รหัสที่ใช้งานอยู่ในปัจจุบันActivityจางหายไปและจางหายไปในการเริ่มต้นใหม่Activityทำให้การเปลี่ยนแปลงราบรื่น

อัปเดต : @Dan J ชี้ให้เห็นว่าการใช้แอนิเมชั่น Android ในตัวช่วยเพิ่มประสิทธิภาพซึ่งฉันพบว่าเป็นเช่นนั้นหลังจากทำการทดสอบบางอย่าง หากคุณต้องการทำงานกับภาพเคลื่อนไหวในตัวให้ใช้:

overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

สังเกตว่าฉันอ้างถึงandroid.Rแทนที่จะRเข้าถึงรหัสทรัพยากร

UPDATE : ตอนนี้มันเป็นเรื่องธรรมดาที่จะดำเนินการเปลี่ยนโดยใช้ระดับการเปลี่ยนที่รู้จักในระดับ API 19


65
การใช้แอนิเมชั่น Android ในตัวดูเหมือนจะส่งผลให้การเปลี่ยนแปลงราบรื่นขึ้น: การoverridePendingTransition(android.R.anim.fadein, android.R.anim.fadeout);ดูไฟล์เหล่านั้นอาจให้คำแนะนำเกี่ยวกับวิธีการปรับปรุงภาพเคลื่อนไหวที่กำหนดเองของคุณ (เช่นการทำให้การเลือนหายไปนานกว่าการเลือนหายไป)
Dan J

42
มันมีขีดล่าง: overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);:)
AlvaroSantisteban

ฉันต้องใช้ overridePendingTransition onCreate หรือในทุกๆ Intent? หรือขึ้นอยู่กับสิ่งที่ฉันต้องการ? ขอบคุณ.
Ricardo

19
มีตัวเลือกโดยไม่ต้อง "ลบล้าง":Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getContext(), android.R.anim.fade_in, android.R.anim.fade_out).toBundle(); startActivity(intent, bundle);
oleynikd

1
การเปลี่ยนแปลงดังกล่าวข้างต้นจะถูกดำเนินการเฉพาะในกรณีที่เปิดใช้งานในตัวเลือกของนักพัฒนาซอฟต์แวร์ให้ดูstackoverflow.com/a/30422015/2914140
CoolMind

22

เพียงโพสต์คำตอบอีกครั้ง โดยoleynikdเพราะมันง่ายและเรียบร้อย

Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getContext(),
    android.R.anim.fade_in, android.R.anim.fade_out).toBundle(); 
startActivity(intent, bundle);

เนื่องจาก overridePendingTransition ใช้ไม่ได้ในโทรศัพท์มือถือบางรุ่นและวิธีแก้ปัญหาของ Enes ก็ไม่ดีนักคำตอบนี้ควรเป็นคำตอบที่ถูกต้อง
Hugo Passos

19

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

View view = findViewById(android.R.id.content);
Animation mLoadAnimation = AnimationUtils.loadAnimation(getApplicationContext(), android.R.anim.fade_in);
mLoadAnimation.setDuration(2000);
view.startAnimation(mLoadAnimation);

1
วิธีจัดการภาพเคลื่อนไหวสำหรับกิจกรรมก่อนหน้าหรือกิจกรรมหลัก
Mehmed

9
ในการตั้งค่าภาพเคลื่อนไหวสำหรับการเปลี่ยนกลับไปที่กิจกรรมหลักให้ใช้รหัสนี้: @Override public void onBackPressed() { super.onBackPressed(); overridePendingTransition(R.anim.fade_in, R.anim.fade_out); }
John Verco

15

คุณยังสามารถใช้โค้ดนี้ในไฟล์style.xmlของคุณได้ดังนั้นคุณไม่จำเป็นต้องเขียนอะไรอีกในactivity.java

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowAnimationStyle">@style/AppTheme.WindowTransition</item>
</style>

<!-- Setting window animation -->
<style name="AppTheme.WindowTransition">
    <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
    <item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.