Làm cách nào để cung cấp hoạt ảnh khi gọi một hoạt động khác trong Android?


115

Tôi có hai Hoạt động A và B. Tôi muốn có Hoạt ảnh thu nhỏ khi Hoạt động A gọi B và tối đa hóa hoạt ảnh khi Hoạt động B gọi A. Tôi không cần tệp xml hoạt ảnh cho việc này.

Khi chúng ta gọi một Activity khác trong Android, nó cung cấp hoạt ảnh mặc định và sau đó nó gọi hoạt ảnh thu nhỏ.

Điều tôi muốn là hoạt ảnh mặc định sẽ không xảy ra và hoạt ảnh mà tôi muốn sẽ xảy ra.

Chúng ta có thể thực sự cung cấp hoạt ảnh khi gọi Hoạt động khác không?

Câu trả lời:


144

Kể từ API 16, bạn có thể cung cấp gói tùy chọn hoạt động khi gọi Context.startActivity (Intent, Bundle) hoặc các phương thức liên quan. Nó được tạo thông qua trình tạo ActivityOptions :

Intent myIntent = new Intent(context, MyActivity.class);
ActivityOptions options = 
   ActivityOptions.makeCustomAnimation(context, R.anim.fade_in, R.anim.fade_out);
context.startActivity(myIntent, options.toBundle());

Đừng quên kiểm tra các phương pháp khác của trình tạo ActivityOptions và ActivityOptionsCompat nếu bạn đang sử dụng Thư viện hỗ trợ.



API 5+:

Đối với các ứng dụng nhắm mục tiêu API cấp 5+, có overridePendingTransitionphương pháp Hoạt động . Nó cần hai ID tài nguyên cho các hoạt ảnh đến và đi. Một id của 0sẽ vô hiệu hóa các hoạt ảnh. Gọi cái này ngay sau startActivitycuộc gọi.

I E:

startActivity(new Intent(this, MyActivity.class));
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

API 3+:

Bạn có thể ngăn hoạt ảnh mặc định (Trượt vào từ bên phải) bằng Intent.FLAG_ACTIVITY_NO_ANIMATION cờ trong ý định của bạn.

I E:

Intent myIntent = new Intent(context, MyActivity.class);
myIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
context.startActivity(myIntent);

thì trong Hoạt động của bạn, bạn chỉ cần chỉ định hoạt ảnh của riêng mình.

Điều này cũng hoạt động đối với API 1.5 (Cấp 3).


4
Ý bạn là gì khi bạn nói "chỉ định hoạt ảnh của riêng bạn"? Làm thế nào để bạn làm điều này? Cảm ơn!
pqn

Tôi có cùng một câu hỏi. Có thể là bắt đầu hoạt ảnh trong onResume và onPause.
Tima

có cách nào để sử dụng Animator thay thế không?
nhà phát triển android

Bạn cũng có thể sử dụng tương tự sau khi gọi xong ()!
thiagolr

Không phải R.anim.fade_invẫn là một hoạt ảnh tệp xml mà chúng ta cho là có trong đó res\anim ?
Alex Jolig

78

Bạn phải sử dụng phương thức OverridePendingTransition để đạt được nó, phương thức này nằm trong lớp Activity . Ảnh động mẫu trong thư mục res / anim của ví dụ apidemos. Kiểm tra nó. Hơn cả việc kiểm tra bản demo trong ApiDemos / App / Activity / animation .

Thí dụ:

@Override
public void onResume(){
    // TODO LC: preliminary support for views transitions
    this.overridePendingTransition(R.anim.in_from_right, R.anim.out_to_left);
}

1
Cảm ơn vi đa trả lơi. Phương thức overridePendingTransition được hỗ trợ từ API cấp 5 và tôi muốn ứng dụng được hỗ trợ từ Android 1.5. Có cách nào khác để cung cấp Hoạt ảnh từ Hoạt động này sang Hoạt động khác không.
sunil

5
tuyệt vời! điều này thật thú vị khi chơi cùng
Ai đó ở đâu đó

@sunil i có cùng một quetion như yours.could bạn giải quyết vấn đề hình ảnh động với mức api 3 hoặc 4 (không 5)?
Dr.jacky

giữ mã hoạt ảnh trong onResume () sẽ khiến hoạt ảnh phát khi người dùng ra ngoài ứng dụng và quay lại. Không lý tưởng trong nhiều ứng dụng.
Vihaan Verma

Tôi cần thêm super.onResume();, đã nhận được: "android.util.SuperNotCalledException: Activity {com.abc.MyActivity} đã không gọi đến super.onResume ()"
Gene Bo


3

Jelly Bean hỗ trợ thêm cho việc này bằng phương thức ActivityOptions.makeCustomAnimation () . Tất nhiên, vì nó chỉ có trên Jelly Bean nên nó hoàn toàn vô giá trị cho các mục đích thực tế.


5
Nó không còn vô giá trị nữa :)
Greg Ennis

Sử dụng ActivityOptionsCompatnếu bạn nhắm mục tiêu trước JellyBean.
Thùy Trinh
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.