2010-04-16 28 views
107

Tôi có hai Hoạt động A và B. Tôi muốn có Ảnh động 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 các tệp xml hoạt ảnh cho việc này.Cách cung cấp hoạt ảnh khi gọi một hoạt động khác trong Android?

Khi chúng tôi gọi một Hoạt động khác trong Android, nó sẽ cung cấp hoạt ảnh mặc định của nó và sau đó gọi là 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 tôi muốn sẽ xuất hiện.

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

Trả lời

129

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

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 người xây dựng 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 mức API 5 + có các hoạt động overridePendingTransition phương pháp. Phải mất hai ID tài nguyên cho hoạt ảnh đến và đi. Id của 0 sẽ tắt hoạt ảnh. Gọi ngay sau cuộc gọi startActivity.

tức là .:

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

API 3+:

Bạn có thể ngăn chặn sự hình ảnh động mặc định (Trượt từ bên phải) với Intent.FLAG_ACTIVITY_NO_ANIMATION cờ trong ý định của bạn.

tức là .:

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

sau đó trong hoạt động của bạn bạn chỉ cần có để xác định hoạt hình của riêng bạn.

Điều này cũng phù hợp với API 1.5 (Cấp độ 3).

+4

Ý của 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

+0

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

+0

có cách nào để sử dụng Animator thay thế không? –

78

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

Ví 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 bạn đã trả lời. Ghi đè phương thứcPendingTransition đượ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ừ một Hoạt động cho một hoạt động khác không. – sunil

+5

tuyệt vời! đây là rất nhiều niềm vui để chơi với –

+0

@sunil tôi có cùng một quetion như của bạn. Bạn có thể giải quyết vấn đề? hoạt ảnh với api cấp 3 hoặc 4 (không 5) –

3

Jelly Bean thêm hỗ trợ cho điều này với các phương pháp ActivityOptions.makeCustomAnimation(). Tất nhiên, vì nó chỉ có trên Jelly Bean, nó là khá nhiều vô giá trị cho các mục đích thực tế.

+5

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

+0

Sử dụng 'ActivityOptionsCompat' nếu bạn nhắm mục tiêu trước Jellybean. –

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