2011-11-30 29 views
30

Tôi biết tôi có thể thay đổi quá trình chuyển đổi hoạt động bằng cách sử dụng đoạn mã sau ngay sau khi startActivity() hoặc kết thúc()Làm cách nào để thay đổi tất cả các chuyển đổi hoạt động cùng một lúc trong ứng dụng Android?

activity.overridePendingTransition(R.anim.activity_close_enter, R.anim.activity_close_exit);

Nhưng nếu tôi có mười hoạt động trong ứng dụng của tôi, tôi phải làm điều đó gấp mười lần; và rất khó sửa đổi. Vì vậy, tôi tự hỏi nếu có một cách để thiết lập chuyển tiếp cho tất cả các hoạt động trong ứng dụng cùng một lúc. Có bất kỳ cấu hình tương ứng nào trong AndroidManifest.xml không?

Cảm ơn!

Trả lời

52

Bạn muốn đầu tiên tạo ra một <style> trong res/styles.xml, như thế này:

<style name="YourAnimation.Activity" parent="@android:style/Animation.Activity"> 
     <item name="android:windowEnterAnimation">@anim/your_in_down</item> 
     <item name="android:windowExitAnimation">@anim/your_out_down</item> 
    </style> 

Sau đó, bạn có thể áp dụng phong cách đến một chủ đề, trong cùng một tập tin:

<style name="YourTheme" parent="android:Theme.Translucent"> 
     ... 
     <item name="android:windowAnimationStyle">@style/YourAnimation.Activity</item> 
    </style> 

Và cuối cùng, áp dụng chủ đề cho hoạt động của bạn trong tệp kê khai:

<activity 
     android:name=".YourActivity" 
     android:theme="@style/YourTheme" /> 

Xem các liên kết này cho r tham khảo:

+20

Nó hoạt động! Thực ra, tôi thay đổi một chút: ' ' –

+0

@DavidLiu, các hình ảnh động mở trông giống như họ đang làm việc nhưng các hình ảnh động gần không có hiệu lực – toobsco42

+0

@GenLiu bạn có thể chỉ cho tôi của bạn. xml ví dụ? Tôi chỉ không thể thấy sự khác biệt giữa openexit và đóng nhập, ví dụ: –

13

Tôi biết điều này đã được trả lời nhưng đây là những gì tôi đã làm trong tôi. Chúng tôi vẫn hỗ trợ API 14 vì vậy có một số hoạt ảnh bị thiếu mà tôi phải đưa vào dự án từ API 22 (slide_in_right, slide_out_left). Điều này có nghĩa là trượt trên màn hình khi bạn mở một hoạt động mới và trượt một hoạt động đóng cửa sang bên trái. Khi bạn bấm lại nó sẽ làm ngược lại, trượt từ bên trái màn hình trước đó và đóng ra bên phải màn hình hiện tại.

<style name="YourTheme" parent="android:Theme.Translucent"> 
    ... 
    <item name="android:windowAnimationStyle">@style/YourAnimation.Activity</item> 
</style> 

<style name="YourAnimation.Activity" parent="@android:style/Animation.Activity"> 
    <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item> 
    <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item> 
    <item name="android:activityCloseEnterAnimation">@android:anim/slide_in_left</item> 
    <item name="android:activityCloseExitAnimation">@android:anim/slide_out_right</item> 
</style> 
+0

Trực tiếp từ thư viện API 22, chỉ cần tải xuống nguồn cho API 22 và nó sẽ nằm trong thư mục hoạt ảnh. – JPM

6

Giải pháp của tôi hầu như giống như câu trả lời JPM. Nhưng đây là một số tập tin bổ sung mà bạn có thể yêu cầu.

<!-- 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/colorPrimary</item> 
    <item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item> 

</style> 

<style name="CustomActivityAnimation" parent="@android:style/Animation.Activity"> 
    <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item> 
    <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item> 
    <item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item> 
    <item name="android:activityCloseExitAnimation">@anim/slide_out_right</item> 
</style> 

Tạo anim thư mục trong thư mục res và sau đó tạo ra bốn hoạt hình này tập tin:

slide_in_right.xml

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="100%p" android:toXDelta="0" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 

slide_out_left.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="0" android:toXDelta="-100%p" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 

slide_in_left.xml

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="-100%p" android:toXDelta="0" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 

slide_out_right.xml

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="0" android:toXDelta="100%p" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 
+0

điều này không hoạt động chút nào, ít nhất là không phải trên android 6 (huawei p8) – qkx

+0

Hoạt động trơn tru của nó trong guawei mini của tôi (Android 6) và Nexus 9 (Android 7). Vui lòng chạy dự án này: https://github.com/ShohanAhmed/Android-Activity-Transition-Custom-Animation –

+0

tôi đã điều tra một vấn đề và bạn đã đúng một phần. Nó cũng đang chạy trên điện thoại của tôi, nhưng chỉ khi bạn gọi ý định (để hiển thị hoạt động mới) từ hoạt động. Nếu bạn muốn mở một số hoạt động từ tiện ích con và sử dụng Mục đích đang chờ xử lý, nó không hoạt động ở đó. Trong trường hợp này, tùy chọn duy nhất là đặt hoạt ảnh theo chương trình trong mã như tôi đã đề cập ban đầu .... – qkx

Các vấn đề liên quan