Android에서 다른 활동을 호출 할 때 애니메이션을 제공하는 방법은 무엇입니까?


115

두 개의 활동 A와 B가 있습니다. 활동 A가 B를 호출 할 때 애니메이션 축소를 원하고 활동 B가 A를 호출 할 때 애니메이션을 최대화하고 싶습니다.이를 위해 애니메이션 xml 파일이 필요하지 않습니다.

Android에서 다른 Activity를 호출하면 기본 애니메이션이 제공되고 축소 애니메이션이 호출됩니다.

내가 원하는 것은 기본 애니메이션이 발생하지 않아야하고 내가 원하는 애니메이션이 발생해야한다는 것입니다.

다른 Activity를 호출 할 때 실제로 애니메이션을 줄 수 있습니까?

답변:


144

API 16부터 Context.startActivity (Intent, Bundle) 또는 관련 메서드를 호출 할 때 활동 옵션 번들을 제공 할 수 있습니다 . 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());

빌더 및하여 ActivityOptions의 다른 방법을 체크 아웃하는 것을 잊지 마세요 ActivityOptionsCompat 당신이 지원 라이브러리를 사용하는 경우입니다.



API 5 이상 :

API 레벨 5 이상을 대상으로하는 앱의 경우 활동 overridePendingTransition메소드가 있습니다. 들어오고 나가는 애니메이션에 대해 두 개의 리소스 ID가 필요합니다. 의 ID 0는 애니메이션을 비활성화합니다. 통화 후 즉시 startActivity전화하십시오.

즉 :

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

API 3 이상 :

Intent.FLAG_ACTIVITY_NO_ANIMATION텐트 의 플래그를 사용하여 기본 애니메이션 (오른쪽에서 슬라이드)을 방지 할 수 있습니다 .

즉 :

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

그런 다음 활동에서 자신 만의 애니메이션을 지정하기 만하면됩니다.

이는 1.5 API (레벨 3)에서도 작동합니다.


4
"자신의 애니메이션 지정"이란 무엇을 의미합니까? 어떻게하나요? 감사!
pqn

같은 질문이 있습니다. 아마도 onResume 및 onPause의 시작 애니메이션에 있습니다.
Tima

대신 Animator를 사용하는 방법이 있습니까?
안드로이드 개발자

finish ()를 호출 한 후에도 동일하게 사용할 수 있습니다!
thiagolr

R.anim.fade_in우리가 가지고 있다고 생각하는 xml 파일 애니메이션이 아직 아닌가요 res\anim ?
Alex Jolig 2015 년

78

이를 위해서는 Activity 클래스 에있는 OverridePendingTransition 메서드를 사용해야합니다 . apidemos 예제의 res / anim 폴더에있는 샘플 애니메이션. 확인해 봐. ApiDemos / App / Activity / animation 에서 데모를 확인하는 것 이상 입니다.

예:

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

1
답장을 보내 주셔서 감사합니다. overridePendingTransition 메서드는 API 레벨 5에서 ​​지원되며 애플리케이션이 Android 1.5에서 지원되기를 원합니다. 한 활동에서 다른 활동으로 애니메이션을 제공하는 다른 방법이 있습니까?
sunil

5
대박! 이 게임은 정말 재미 있습니다
Someone Somewhere

내가 yours.could처럼 같은 quetion이 @sunil 당신은 문제를 해결 애니메이션 API 레벨 3 또는 4 (안 5)와 함께?
Dr.jacky

onResume ()에 애니메이션 코드를 유지하면 사용자가 앱을 벗어나 돌아올 때 애니메이션이 재생됩니다. 많은 앱에서 이상적이지 않습니다.
Vihaan Verma 2015

을 추가해야합니다 super.onResume();. "android.util.SuperNotCalledException : Activity {com.abc.MyActivity}가 super.onResume ()을 호출하지 않았습니다."
Gene Bo


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.