Làm thế nào để thực hiện hoạt ảnh mờ dần trên chuyển tiếp Hoạt động?


89

Tôi đang soạn thảo một hiệu ứng chuyển tiếp giữa hoạt động biểu trưng và Hoạt động chính của mình, nhưng tôi gặp vấn đề là trước khi biến mất, hoạt động sẽ chuyển lên đầu:

<?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>

Làm cách nào để cải thiện mã này để chỉ nhận được hiệu ứng biến mất?

Câu trả lời:


237

Bạn có thể tạo các tệp hoạt hình .xml của riêng mình để làm mờ dần tệp mới Activityvà mờ dần hiện tại 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" />

Sử dụng nó trong mã như thế: (Bên trong của bạn Activity)

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

Đoạn mã trên sẽ làm mờ dần mã hiện đang hoạt động Activityvà mờ dần trong đoạn mã mới bắt đầu, Activitydẫn đến quá trình chuyển đổi suôn sẻ.

CẬP NHẬT : @Dan J đã chỉ ra rằng việc sử dụng các hoạt ảnh tích hợp sẵn trên Android sẽ cải thiện hiệu suất , điều mà tôi thực sự thấy đúng sau khi thực hiện một số thử nghiệm. Nếu bạn thích làm việc với các hoạt ảnh dựng sẵn, hãy sử dụng:

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

Lưu ý tôi tham chiếu android.Rthay vì Rtruy cập id tài nguyên.

CẬP NHẬT : Thực tế phổ biến hiện nay là thực hiện chuyển đổi bằng cách sử dụng lớp Chuyển đổi được giới thiệu trong API cấp 19 .


65
Việc sử dụng các hoạt ảnh tích hợp sẵn trên Android dường như mang lại quá trình chuyển đổi mượt mà hơn: overridePendingTransition(android.R.anim.fadein, android.R.anim.fadeout);Xem các tệp đó cũng có thể cung cấp cho bạn các gợi ý về cách cải thiện hoạt ảnh tùy chỉnh của mình (ví dụ: bằng cách làm mờ dần lâu hơn là mờ dần).
Dan J

42
Nó có một undescore: overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);:)
AlvaroSantisteban

Tôi có phải sử dụng overridePendingTransition onCreate hay trong mọi Intent không? Hay phụ thuộc vào những gì tôi muốn? Cảm ơn.
Ricardo

19
Có một tùy chọn mà không cần "ghi đè":Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getContext(), android.R.anim.fade_in, android.R.anim.fade_out).toBundle(); startActivity(intent, bundle);
oleynikd

1
Quá trình chuyển đổi trên chỉ được thực hiện nếu được bật trong Tùy chọn nhà phát triển, hãy xem stackoverflow.com/a/30422015/2914140 .
CoolMind

22

Chỉ đăng lại câu trả lời của oleynikd vì nó đơn giản và gọn gàng

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

Vì overridePendingTransition không hoạt động trong một số điện thoại di động và giải pháp của Enes không tốt lắm, nên câu trả lời này phải là câu trả lời chính xác.
Hugo Passos

19

bạn cũng có thể thêm hoạt ảnh trong hoạt động của mình, trong phương thức onCreate như bên dưới becasue overridePendingTransition không hoạt động với một số thiết bị di động hoặc nó phụ thuộc vào cài đặt thiết bị ...

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

1
Làm thế nào để xử lý hoạt ảnh cho hoạt động trước đó hoặc hoạt động chính?
Mehmed

9
Để thiết lập các hình ảnh động cho mặt sau chuyển đổi sang hoạt động cha mẹ sử dụng mã này: @Override public void onBackPressed() { super.onBackPressed(); overridePendingTransition(R.anim.fade_in, R.anim.fade_out); }
John VERCO

15

bạn cũng có thể sử dụng mã này trong tệp style.xml của mình để bạn không cần viết bất kỳ thứ gì khác trong activity.java của mình

<!-- 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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.