Làm cách nào để thêm hoạt ảnh vào kết thúc hoạt động ()


98

Tôi đang sử dụng overridePendingTransition khi hoạt động của tôi được tạo và hoạt động tốt, tôi có thể thấy sự mờ dần trong các hoạt động rất tốt, nhưng khi tôi thử và tạo hiệu ứng cho kết thúc hoạt động, nó vẫn đang thực hiện trang trình bày từ phải sang trái mặc định.

Đầu tiên tôi đã thử xác định hoạt ảnh ra khi bắt đầu hoạt động như sau:

Intent myIntent = new Intent(a, SkdyAlert.class);
    myIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
    a.startActivity(myIntent);
    if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) {
        AnimationHelper.overridePendingTransition(a, R.anim.fadein, R.anim.fadeout);
    }

Sau đó, tôi đã thử làm điều đó khi tôi hoàn thành hoạt động

okBtn.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            finish();
            if (android.os.Build.VERSION.SDK_INT > android.os.Build.VERSION_CODES.DONUT) {
                AnimationHelper.overridePendingTransition(activity, 0, R.anim.fadeout);
            }
        }
    });

Nhưng cả hai cách tiếp cận này đều không ngăn được trượt "từ phải sang trái" cho hoạt ảnh thoát. Bất kỳ ý tưởng về những gì tôi đang làm sai?

Câu trả lời:


228

Tôi ghi đè quá trình chuyển đổi đang chờ xử lý ngay sau khi gọi finish ();

Trong trường hợp của tôi, tôi đã làm điều đó để tránh chuyển tiếp.

finish();
Details.this.overridePendingTransition(R.anim.nothing,R.anim.nothing);

Thứ tự là quan trọng :)


5
bởi "Chi tiết", @Goofyahead đang đặt tên cho Hoạt động kèm theo của anh ấy - ymmv. Kỹ thuật này làm việc cho tôi để thay thế một hình ảnh động từ Theme.Dialog trên 2.x, nhưng không 3.x hoặc 4.x
larham1

8
Làm thế nào để R.anim.nothingtrông như thế nào?
sandalone

Sử dụng câu trả lời @Felipe Micaroni Lalli, 0 nghĩa là không có hoạt ảnh.
Yeung

Điều này như đã giúp tôi quá. Nó giải thích cách xác định hoạt ảnh của riêng bạn: stackoverflow.com/questions/5151591/…
Adam

23
Bạn có thể ghi đè finish()phương pháp để tránh chuyển đổi trong mọi trường hợp (đã nhấn nút quay lại, như mẫu): @Override public void finish() { super.finish(); overridePendingTransition(0, 0); }
eugeneek

29

Câu hỏi này đã được trả lời nhưng cách hiệu quả nhất để đặt hoạt ảnh trong khi thoát khỏi một hoạt động là ghi đè phương thức "finish ()" của hoạt động liên quan:

@Override
public void finish() {
    super.finish();
    overridePendingTransition(R.anim.hold, R.anim.slide_out_bottom);
}

24

Tôi khuyên bạn nên sử dụng phương thức isFinishing () để định cấu hình các hoạt ảnh tại onPause thay vì gọi finish ()

@Override
protected void onPause() {
    super.onPause();
    if (isFinishing()){
        overridePendingTransition(R.anim.activity_slide_in, R.anim.activity_slide_out);
    }

}

Tại sao điều đó tốt hơn?
Manuel


19

Tôi đã khắc phục sự cố này bằng cách sử dụng loại phương pháp này:

để mở bằng hoạt ảnh:

 Intent newUser = new Intent(getBaseContext(), NewUserActivity.class);
    startActivity(newUser);
    overridePendingTransition(R.anim.slide_in_right,R.anim.slide_out_left);

Để đóng bằng hoạt ảnh:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    onBackPressed();
    return super.onOptionsItemSelected(item);
}

@Override
public void onBackPressed() {
    super.onBackPressed();
    overridePendingTransition(R.anim.slide_out_right,R.anim.slide_in_right);
}

12

Nhìn vào việc thực hiện nó thông qua một chủ đề. Bạn có thể xác định nhập hoạt ảnh thoát cho các hoạt động hoặc toàn bộ ứng dụng


ĐÚNG! Điều đó là vậy đó. Tốt thôi. Tôi đã áp dụng một chủ đề và chủ đề đã được xác định một hoạt ảnh, đó là lý do tại sao tôi không thể làm cho hoạt ảnh của riêng mình hoạt động. Cảm ơn rất nhiều cho cái nhìn sâu sắc!
b-ryce

3
bạn có thể cho tôi một gợi ý về nơi để xem những chuyển đổi nào sẽ được cung cấp bởi các chủ đề. Tôi cũng muốn thiết lập chuyển đổi tùy chỉnh cho tất cả các trang web nhưng tôi không biết làm thế nào.
LuckyMalaka

@Zapnologica, câu trả lời khác này mà tôi đã đưa ra cho một câu hỏi tương tự giải thích nó thêm một chút. stackoverflow.com/questions/4940574/…
Nathan Schwermann,

6

Theo sau câu trả lời của @schwiz, đây là ghi đè hoạt ảnh cho chủ đề Hộp thoại được tích hợp sẵn, nơi tôi đã xác định các hoạt ảnh slide_up và slide_down cục bộ. Hoạt động của tôi chỉ định chủ đề MyDialog để có các chuyển đổi này vào và ra.

<style name="Animation.MyDialog" parent="android:Animation.Dialog">
    <item name="android:windowEnterAnimation">@anim/slide_up</item>
    <item name="android:windowExitAnimation">@anim/slide_down</item>
</style>

<style name="Theme.MyDialog" parent="android:Theme.Dialog">
    <item name="android:windowAnimationStyle">@style/Animation.MyDialog</item>
</style>


5

Sử dụng startActivityForResult để bắt đầu hoạt động của con bạn và trong onActivityResult () của hoạt động cha mẹ của bạn:

    @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if(requestCode==REQUEST_YOUR_ACTIVITY) {
        overridePendingTransition(R.anim.parent_appearing_anim, R.anim.child_dissmissing_anim);
    }
    super.onActivityResult(requestCode, resultCode, arg2);
}

Điều này hoạt động khi nhấn lại (nút vật lý). Để làm cho nó cũng hoạt động với mũi tên "lên", hãy xem câu trả lời sau: /programming/20161234/onactivityresult-is-not-called-when-the-back-button-in-actionbar-is- đã nhấp vào / 20161352 # 20161352
lenooh

Điều quan trọng cần lưu ý: overridePendingTransition cần được gọi trước khi gọi super.onActivityResult. Nếu không, quá trình chuyển đổi mặt dây chuyền sẽ không bị ghi đè!
goemic
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.