활동 finish ()에 애니메이션을 어떻게 추가 할 수 있습니까?


98

내 활동이 생성되고 잘 작동하는 경우 overridePendingTransition을 사용하고 있습니다.

먼저 활동을 시작할 때 다음과 같이 out 애니메이션을 정의 해 보았습니다.

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);
    }

그런 다음 활동을 마칠 때도 해보았습니다

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);
            }
        }
    });

그러나 이러한 접근 방식 중 어느 것도 이탈 애니메이션의 "오른쪽에서 왼쪽으로"슬라이드를 방해하지 않습니다. 내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?

답변:


228

finish () 호출 직후 보류중인 전환을 재정의합니다.

제 경우에는 전환을 피하기 위해 그렇게했습니다.

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

순서는 중요합니다 :)


5
@Goofyahead는 "Details"에 의해 둘러싸는 Activity (ymmv)의 이름을 지정합니다. 이 기술은 2.x의 Theme.Dialog에서 애니메이션을 대체하는 데 효과적이지만 3.x 또는 4.x는 아닙니다
larham1

8
어떻게 R.anim.nothing생겼습니까?
sandalone

@Felipe Micaroni Lalli 대답을 사용하십시오. 0은 애니메이션이 없음을 의미합니다.
Yeung의

이것도 저를 도왔습니다. 자신 만의 애니메이션을 정의하는 방법을 설명합니다. stackoverflow.com/questions/5151591/…
Adam

23
finish()모든 경우에 전환을 방지하기 위해 메서드를 재정의 할 수 있습니다 (샘플로 뒤로 버튼 누름). @Override public void finish() { super.finish(); overridePendingTransition(0, 0); }
eugeneek

29

이 질문은 이미 답변되었지만 활동을 종료하는 동안 애니메이션을 배치하는 가장 효율적인 방법은 관련 활동의 "finish ()"메서드를 재정의하는 것입니다.

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

24

finish ()를 호출하는 대신 onPause에서 애니메이션을 구성하려면 isFinishing () 메서드를 사용하는 것이 좋습니다.

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

}

그게 더 나은 이유는 무엇입니까?
Manuel


19

이러한 접근 방식을 사용하여이 문제를 해결했습니다.

애니메이션으로 열기 :

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

애니메이션으로 닫으려면 :

@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

주제를 통해 그것을 살펴보십시오. 활동 또는 전체 애플리케이션에 대한 진입 종료 애니메이션을 정의 할 수 있습니다.


예! 그거였다. 글쎄. 이미 테마를 적용했고 테마에 애니메이션이 정의되어있어서 내 애니메이션을 작동시킬 수 없었습니다. 통찰력에 감사드립니다!
b-ryce 2010

3
테마별로 전달 될 트랜지션을 어디에서 볼 수 있는지 힌트를 주시겠습니까? 또한 모든 사이트에 사용자 지정 전환을 설정하고 싶지만 방법을 모르겠습니다.
LuckyMalaka 2011

@Zapnologica 비슷한 질문에 대해 준이 다른 대답은 조금 더 설명합니다. stackoverflow.com/questions/4940574/...
나단 Schwermann에게

6

@schwiz의 답변에 따라 여기에 기본 제공 대화 상자 테마에 대한 애니메이션 재정의가 있습니다. 여기에서 로컬 slide_up 및 slide_down 애니메이션을 정의했습니다. 내 활동은 이러한 전환이 들어오고 나가도록하기 위해 테마 MyDialog를 지정합니다.

<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

startActivityForResult를 사용하여 자식 활동을 시작하고 부모 활동의 onActivityResult ()에서 :

    @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);
}

이것은 뒤로 누를 때 작동합니다 (물리적 버튼). "위쪽"화살표와 함께 작동하도록하려면 다음 답변을 참조하십시오. /programming/20161234/onactivityresult-is-not-called-when-the-back-button-in-actionbar-is- clicked / 20161352 # 20161352
lenooh

주의 할 사항 : super.onActivityResult를 호출하기 전에 overridePendingTransition을 호출해야합니다. 그렇지 않으면 pendint 전환이 무시되지 않습니다!
goemic
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.