Vô hiệu hóa hoạt hình trượt trong hoạt động khi khởi chạy hoạt động mới?


140

Tôi có một hoạt động khởi chạy một hoạt động khác, thông qua một nút bấm. Theo mặc định, trên các phiên bản hệ điều hành Android mới hơn, HĐH sẽ tạo hiệu ứng hoạt động mới trượt từ phải sang trái.

Có cách nào để vô hiệu hóa hoạt hình này? Tôi chỉ muốn hoạt động mới xuất hiện mà không có bất kỳ loại hoạt hình.

Câu trả lời:


190

Các FLAG_ACTIVITY_NO_ANIMATIONlá cờ hoạt động tốt cho việc vô hiệu hóa hình ảnh động khi bắt đầu hoạt động.

Để vô hiệu hóa hoạt hình tương tự được kích hoạt khi gọi finish()một Hoạt động, tức là hoạt hình trượt từ phải sang trái thay vào đó, bạn có thể gọi overridePendingTransition(0, 0)sau khi gọi finish()và hoạt hình tiếp theo sẽ bị loại trừ.

Điều này cũng hoạt động trên hoạt hình nếu bạn gọi overridePendingTransition(0, 0)sau khi gọi startActivity(...).


9
Lưu ý rằng FLAG_ACTIVITY_NO_ANIMATIONoverridePendingTransitionchỉ có cả API cấp 5+.
azdev

Điều này không giúp ích gì khi quay trở lại từ một hoạt động trên phím Back.
Yar

4
Bạn là nhất. overridePendingTransition (0, 0) -> giống như thần. Nó chỉ ghi đè hoạt hình kết thúc () chứ không phải hoạt ảnh được kích hoạt khi tiếp tục hoạt động trước đó.
Philipp Jahoda

1
Tôi không thích câu trả lời này vì nó không bao gồm các chuyển đổi gây ra bằng cách nhấn phím chức năng 'trở lại'. OP hỏi làm thế nào để 'vô hiệu hóa' hoạt hình, chứ không phải 'chọn lọc nói với ứng dụng không phát nó'
1owk3y

3
Nếu bạn cũng muốn tắt hoặc ghi đè hoạt hình "trở lại", hãy ghi đè phương thức finish () trong hoạt động của bạn và đặt cuộc gọi đó vào đó cùng với lệnh gọi super.finish (). Vấn đề được giải quyết.
Grishka

171

IMHO câu trả lời này ở đây giải quyết vấn đề theo cách thanh lịch nhất ..

Nhà phát triển nên tạo một phong cách ,

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

sau đó trong tệp kê khai đặt nó làm chủ đề cho hoạt động hoặc toàn bộ ứng dụng.

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

Voila! Tốt đẹp và dễ dàng..

ps tín dụng cho tác giả ban đầu xin vui lòng ..


1
Nó không hoạt động cho Back và nó thay đổi giao diện của thanh tiêu đề (làm cho nó nhỏ đi) ...
Marek

bạn có chắc là bạn đã không thêm một số thuộc tính khác trong phong cách không, vì không ai khác đã báo cáo "hiệu ứng" này mà bạn đề cập đến ..
Ewoks

Chỉ để tham khảo, điều này có thể gây ra sự cố trong hệ thống phân cấp chế độ xem mà bạn cần requestWindowFeature ().
Martin Marconcini

Sẽ tốt hơn nếu bạn giải thích một chút, vì vậy chúng tôi tránh các vấn đề có thể xảy ra
Ewoks

4
@Marek Tôi đoán vấn đề của bạn không thay đổi chính xác cha mẹ = "android: Theme". Bạn nên thay đổi nó với chủ đề bạn muốn sử dụng, về cơ bản mã này chỉ vô hiệu hóa hoạt hình cụ thể trong một chủ đề. ví dụ: sử dụng "Theme.AppCompat.Light.NoActionBar" thay vì "android: Theme", và bạn sẽ hiểu ý tôi muốn nói. Tôi hy vọng nó sẽ giúp.
Recom

33

Ứng dụng

startActivity(new Intent(FirstActivity.this,SecondActivity.class));

sau đó

overridePendingTransition(0, 0);

Điều này sẽ dừng hoạt hình.


28

Theo tôi câu trả lời tốt nhất là sử dụng "overridePendingTransition(0, 0);"

để tránh nhìn thấy hình ảnh động khi bạn muốn Intentđến một Activitysử dụng:

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

và không nhìn thấy hình ảnh động khi bạn nhấn nút quay lại onPausePhương thức ghi đè trongnewactivity

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


13

Điều này làm việc cho tôi khi vô hiệu hóa kết thúc Hoạt hình hoạt hình.

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

9

Tôi đang ở 4.4.2 và gọi overridePendingTransition (0, 0) trong hoạt động khởi chạy, onCreate () sẽ vô hiệu hóa hoạt hình bắt đầu (gọi overridePendingTransition (0, 0) ngay sau khi startActivity () không hoạt động). Như đã lưu ý trong một câu trả lời khác, việc gọi overridePendingTransition (0, 0) sau khi kết thúc () sẽ vô hiệu hóa hoạt ảnh đóng.

Btw, tôi thấy rằng việc thiết lập kiểu với "android: windowAnimationStyle"> @ null (một câu trả lời khác được đề cập ở đây) đã gây ra sự cố khi hoạt động khởi chạy của tôi cố gắng đặt tiêu đề thanh hành động. Gỡ lỗi thêm, tôi phát hiện ra rằng bằng cách nào đó, điều này khiến window.hasFeature (Window.FEATURE_ACTION_BAR) không thành công trong initActionBar () của Activity.


1
còn onresume thì sao? hoạt động hàng đầu duy nhất và tất cả những thứ đó.
Lassi Kinnunen

7

FLAG_ACTIVITY_NO_ANIMATION có thể hoạt động, nhưng không thực hiện được mẹo cho tôi khi kết hợp với FLAG_ACTIVITY_CLEAR_TASK và FLAG_ACTIVITY_NEW_TASK. Tôi dường như đang nhìn thấy hình ảnh động để tạo một tác vụ mới với ngăn xếp hoạt động mới khi tôi điều hướng sang các chế độ xem cấp cao khác của mình.

Điều đã làm ở đây là gọi "overridePendingTransition (0, 0);" hoặc ngay sau cuộc gọi startActivity () của tôi hoặc onPause (). Cả hai cách đều hoạt động, nhưng thực hiện nó sau startActivity () giúp tôi kiểm soát nhiều hơn một chút khi tôi muốn hoạt hình và khi tôi không.


2

Tôi gặp vấn đề tương tự khi màn hình đen xuất hiện khi chuyển đổi trượt từ hoạt động này sang hoạt động khác bằng cách sử dụng overridependingtransition. và tôi đã làm theo cách dưới đây và nó hoạt động

1) đã tạo một noanim.xmlthư mục hoạt hình

<?xml version="1.0" encoding="utf-8"?>
<translate 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="0%p"
    android:toYDelta="0%p" />

và được sử dụng

overridePendingTransition(R.drawable.lefttorightanim, R.anim.noanim);

Tham số đầu tiên là hoạt hình gốc của tôi và tham số thứ hai là hoạt hình thoát như hoạt hình giả của tôi


1

Để tránh nền đen khi bắt đầu một hoạt động đã có trong ngăn xếp, tôi đã thêm overridePendingTransition(0,0)vào onStart():

@Override
protected void onStart() {
    overridePendingTransition(0,0);
    super.onStart();

}
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.