2013-08-27 76 views
54

Tôi codifiying một hiệu ứng chuyển tiếp giữa hoạt động biểu tượng của tôi và các hoạt động chính của tôi, nhưng tôi có vấn đề mà trước khi biến mất di chuyển hoạt động về đầu trang:Làm cách nào để thực hiện hoạt ảnh mờ dần khi chuyển đổi Hoạt động?

<?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 thế nào tôi có thể cải thiện mã này để có được chỉ là một hiệu ứng biến mất ?

Trả lời

157

Bạn có thể tạo riêng của bạn file hoạt hình .xml mờ dần trong một mới Activity và làm mờ dần các hiện 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 mã trong mã như sau: (Bên trong hoạt động của bạn)

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

Mã trên sẽ làm mờ hoạt động hiện đang hoạt động và mờ dần trong hoạt động mới được bắt đầu.

UPDATE: @ Dan J chỉ ra rằng bằng cách sử dụng được xây dựng trong hình ảnh động Android cải thiện hiệu suất, mà thực sự có vẻ là như vậy. Nếu bạn muốn sử dụng được xây dựng trong hình ảnh động, sử dụng:

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

Thông báo sử dụng android.R thay vì R.

+0

Cảm ơn nó thực sự hoạt động :) Tôi quên tệp fade_out.xml. – MarcForn

+49

Sử dụng các hoạt ảnh Android có sẵn có thể dẫn đến 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 tùy chỉnh của bạn hoạt ảnh (ví dụ: bằng cách làm mờ dần trong thời gian dài hơn mờ dần). –

+37

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

13

bạn cũng có thể thêm hình ảnh động trong hoạt động của bạn, trong phương pháp onCreate như dưới đây becasue overridePendingTransition không đang làm việc với một số điện thoại 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 cách nào để xử lý hoạt ảnh cho hoạt động trước đó hoặc của cha mẹ? – Mehmed

+7

Để thiết lập các hình ảnh động cho quá trình chuyển đổi trở lại việc sử dụng hoạt động cha mẹ mã này: '@ Override public void onBackPressed() { super.onBackPressed(); ghi đèPendingTransition (R.anim.fade_in, R.anim.fade_out); } ' –

7

Chỉ cần tái đăng answer by 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); 
+0

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 phải là rất tốt đẹp, câu trả lời này phải là chính xác. –

0

bạn cũng có thể sử dụng mã này trong style.xml tập tin của bạn, do đó bạn không cần phải viết bất cứ điều gì khác trong activity.jav của bạn a

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