Làm cách nào để chuyển đổi hoạt động mà không có hoạt hình trong Android?


164

Làm cách nào để sử dụng đúng cờ Intent FLAG_ACTIVITY_NO_ANIMATION trong tệp AndroidManifest? Tôi cho rằng vấn đề của tôi là tầm thường, nhưng tôi không thể tìm thấy ví dụ hay giải pháp tốt cho nó.

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

Tuy nhiên không có lỗi được báo cáo bởi người khiếu nại, nhưng data không chính xác. Tôi chỉ muốn tắt hoạt hình trong trường hợp chuyển đổi giữa các hoạt động. Tôi có thể sử dụng getWindow().setWindowAnimations(0);trong onCreate hoặc onResume nhưng sử dụng cờ là cách tốt hơn, phải không?

Tôi cũng có thể sử dụng mã:

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

Nhưng tôi muốn sử dụng cờ này trong Bản kê khai Android. Để vô hiệu hóa hình ảnh động trong trường hợp trở lại từ hoạt động thứ hai để đầu tiên.


Tôi đã tìm thấy đường để sử dụng chủ đề - bằng cách xác định nhập, thoát hoạt ảnh cho các hoạt động hoặc toàn bộ ứng dụng. Ai đó có thể cho tôi thêm thông tin về nó?
woyaru

Câu trả lời:


268

Bạn có thể tạo một phong cách,

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

và đặt nó làm chủ đề cho hoạt động của bạn trong tệp kê khai:

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

Bạn cũng có thể xác định một kiểu để chỉ định hoạt ảnh nhập và thoát tùy chỉnh. http://developer.android.com/reference/android/R.attr.html#window EntryAnimation


Cảm ơn, công việc này chỉ tuyệt vời đặc biệt đối với các hoạt động theo chủ đề minh bạch / hội thoại được loại trừ khỏi các khoảng cách với một mối quan hệ nhiệm vụ khác. Không có điều này, hình ảnh động tiếp tục hiển thị tạo ra kết quả rất kỳ lạ cho một hộp thoại được mở!
3c71

Điều này dường như không còn hoạt động cho Lollipop / Android 5.0?
kenyee

Tôi có Android 5 và nó hoạt động với tôi. Kiểu ứng dụng của tôi trông như thế này: <style name = "AppTheme" Parent = "Theme.AppCompat.Light.DarkActionBar"> <item name = "android: windowAnimationStyle"> @ null </ item> </ style>
eatyourg Greens

Hoạt động hoàn hảo trong 6.0 cũng. Một mẹo tuyệt vời. Khi tôi hỏi bên dưới, tôi tự hỏi làm thế nào để vô hiệu hóa hình ảnh động xảy ra khi * lần đầu tiên khởi chạy một ứng dụng ... có cách nào không?!
Fattie

5
sẽ sập nếu bạn mở rộng AppCompatActivity
Mike6679

191

Nếu ngữ cảnh của bạn là một hoạt động, bạn có thể gọi overridePendingTransition :

Gọi ngay sau một trong những hương vị của startActivity (Intent) hoặc kết thúc để chỉ định một hình ảnh chuyển tiếp rõ ràng để thực hiện tiếp theo.

Vì vậy, lập trình:

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

có thể làm điều đó qua adb không?
nhà phát triển Android

@TalAngel overridePendingTransitionđã được thêm vào API cấp 5. Vì vậy, nó không hoạt động trên phiên bản Android "mọi" nhưng tôi đoán bạn nhắm mục tiêu cấp API cao hơn sau đó 5.
Bruno Bieri

43

Hãy thử mã này,

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

1
Điều này thực sự có ích khi bắt đầu hoạt động từ dịch vụ.
DearDhruv

24

Bạn cũng có thể thực hiện việc này trong tất cả các hoạt động mà bạn không muốn chuyển đổi từ:

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

Tôi thích cách tiếp cận này vì bạn không phải lộn xộn với phong cách hoạt động của mình.


Một mẹo tuyệt vời. Tôi tự hỏi làm thế nào để vô hiệu hóa hình ảnh động xảy ra khi * lần đầu tiên khởi chạy một ứng dụng ... có cách nào không?!
Fattie

@Fattie Ghi đè phương thức onStart () của hoạt động khởi chạy của bạn và đặt cùng một mã trong đó.
Jawad Adil


4

Đây là một giải pháp một lớp lót hoạt động ở mức thấp minSdkVersion 14mà bạn nên chèn vào res/styles.xml:

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

như vậy

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

Chúc mừng!


3

Dòng trong phong cách chủ đề hoạt động tốt, nhưng điều đó thay thế hoạt hình bằng một màn hình trắng. Đặc biệt là trên một chiếc điện thoại chậm hơn - nó thực sự gây phiền nhiễu. Vì vậy, nếu bạn muốn chuyển đổi tức thì - bạn có thể sử dụng điều này trong phong cách chủ đề:

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

2

tạo phong cách của riêng bạn ghi đè Android: Theme

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

Sau đó sử dụng nó trong bảng kê khai như thế này:

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

0

Sau khi bắt đầu ý định, bạn có thể sử dụng mã này:

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

Nếu được sử dụng, ý định sẽ hoạt động mà không có hình ảnh động hoặc chuyển tiếp

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.