새로운 활동을 시작할 때 활동 슬라이드 인 애니메이션을 비활성화 하시겠습니까?


140

버튼 클릭을 통해 다른 활동을 시작하는 활동이 있습니다. 기본적으로 Android의 최신 OS 버전에서 OS는 새 활동이 오른쪽에서 왼쪽으로 미끄러 져 움직입니다.

이 애니메이션을 비활성화하는 방법이 있습니까? 새로운 활동이 애니메이션없이 나타나기를 원합니다.

답변:


190

FLAG_ACTIVITY_NO_ANIMATION플래그 활동을 시작할 때 애니메이션을 비활성화하는 벌금을 작동합니다.

finish()액티비티를 호출 할 때 트리거되는 유사한 애니메이션을 비활성화하려면 ( 예 : 애니메이션이 대신 오른쪽에서 왼쪽으로 슬라이드) 호출 overridePendingTransition(0, 0)한 후 호출 finish()하면 다음 애니메이션이 제외됩니다.

또한을 호출 overridePendingTransition(0, 0)한 후 전화 하면 애니메이션에서 작동합니다 startActivity(...).


9
하는 것으로 FLAG_ACTIVITY_NO_ANIMATION하고 overridePendingTransition5+ 모두 API 레벨 만.
azdev

뒤로 키 누르기의 활동에서 되돌아 갈 때 도움이되지 않습니다.
Yar

4
너는 최고야. overridePendingTransition (0, 0)->은 신과 같습니다. finish () 애니메이션 만 재정의하지만 이전 활동을 재개 할 때 트리거되는 애니메이션은 재정의하지 않습니다.
Philipp

1
이 답변은 '뒤로'소프트 키를 눌렀을 때 발생하는 전환을 다루지 않기 때문에 싫어합니다. OP는 애니메이션을 '비활성화'하는 방법을 묻지 만 '선택적으로 앱이 재생하지 않도록 지시하지 않습니다'
1owk3y

3
"back"애니메이션을 비활성화하거나 무시하려면 활동에서 finish () 메서드를 재정의하고 super.finish ()에 대한 호출과 함께 해당 호출을 넣으십시오. 문제 해결됨.
Grishka

171

IMHO 답변은 가장 우아한 방법으로 문제를 해결합니다.

개발자는 스타일을 만들어야합니다 .

<style name="noAnimTheme" parent="android:Theme">
  <item name="android:windowAnimationStyle">@null</item>
</style>

그런 다음 매니페스트 에서 활동 또는 전체 응용 프로그램의 테마로 설정합니다 .

<activity android:name=".ui.ArticlesActivity" android:theme="@style/noAnimTheme">
</activity>

짜잔! 좋고 쉬운 ..

원저자에 대한 PS 크레딧 ..


1
그것은 뒤로 작동하지 않으며 제목 표시 줄의 모양을 변경합니다 (작게 만듭니다).
Marek

u는 반드시 유 스타일로 다른 속성을 추가하지 않았다되어, 아무도 대한 원인은 다른 유 언급이 "효과"..보고했다
Ewoks

참고로, 이것은 WindowFeature ()를 요청해야하는 뷰 계층에서 문제를 일으킬 수 있습니다.
Martin Marconcini

조금 정교하면 좋을 것이므로 가능한 문제를 피하십시오
Ewoks

4
@Marek 문제가 부모 = "android : Theme"를 올바르게 변경하지 않은 것 같습니다. 사용하려는 테마로 변경해야합니다. 기본적으로이 코드는 테마의 특정 애니메이션 만 비활성화합니다. 예를 들어 "android : Theme"대신 "Theme.AppCompat.Light.NoActionBar"를 사용하면 의미하는 바를 얻게됩니다. 도움이 되길 바랍니다.
Recomer

33

대다

startActivity(new Intent(FirstActivity.this,SecondActivity.class));

그때

overridePendingTransition(0, 0);

애니메이션이 중지됩니다.


28

내 생각에 가장 좋은 대답은 사용하는 것입니다 "overridePendingTransition(0, 0);"

당신이 할 때 애니메이션을 보는 피하기 위해 IntentActivity사용 :

this.startActivity(new Intent(v.getContext(), newactivity.class));
this.overridePendingTransition(0, 0);

다시 버튼을 무시 누를 때와 애니메이션을 볼 수 있습니다 onPause에서 방법을 당신의newactivity

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}


13

이것은 활동 완료 애니메이션을 비활성화 할 때 효과적입니다.

@Override
protected void onPause() {
    super.onPause();
    overridePendingTransition(0, 0);
}

9

4.4.2 에 있고 시작 활동의 onCreate ()에서 overridePendingTransition (0, 0)을 호출 하면 시작 애니메이션이 비활성화됩니다 (startActivity ()가 작동하지 않은 즉시 overridePendingTransition (0, 0) 호출). 다른 답변에서 언급했듯이 finish () 다음에 overridePendingTransition (0, 0)을 호출하면 닫기 애니메이션이 비활성화됩니다.

Btw, "android : windowAnimationStyle"> @ null (여기에 언급 된 또 다른 대답)로 스타일을 설정하면 시작 활동이 작업 표시 줄 제목을 설정하려고 할 때 충돌이 발생했습니다. 더 나아가 디버깅을 통해 액티비티의 initActionBar ()에서 window.hasFeature (Window.FEATURE_ACTION_BAR)가 실패한다는 것을 알았습니다.


1
onresume은 어떻습니까? 하나의 최고 활동과 그 모든 것.
Lassi Kinnunen

7

FLAG_ACTIVITY_NO_ANIMATION은 작동 할 수 있지만 FLAG_ACTIVITY_CLEAR_TASK 및 FLAG_ACTIVITY_NEW_TASK와 결합하면 나에게 속임수가 없었습니다. 다른 최상위 뷰로 측면으로 탐색 할 때 새로운 활동 스택으로 새 작업을 생성하기위한 애니메이션이 보입니다.

여기서 효과가 있었던 것은 "overridePendingTransition (0, 0);" 내 startActivity () 호출 또는 onPause () 직후에. 두 가지 방법 모두 효과가 있었지만 startActivity () 후에 수행하면 애니메이션을 원할 때와 원하지 않을 때를 조금 더 제어 할 수 있습니다.


2

를 사용하여 한 활동에서 다른 활동으로 슬라이딩 전환 할 때 검은 화면이 나타나는 것과 비슷한 문제가있었습니다 overridependingtransition. 아래 방법을 따라 작동했습니다.

1) noanim.xml에 anim 폴더를 만들었습니다

<?xml version="1.0" encoding="utf-8"?>
<translate 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:duration="@android:integer/config_longAnimTime"
    android:fromYDelta="0%p"
    android:toYDelta="0%p" />

그리고 사용

overridePendingTransition(R.drawable.lefttorightanim, R.anim.noanim);

원래 애니메이션 인 첫 번째 매개 변수와 더미 애니메이션 인 이탈 애니메이션 인 두 번째 매개 변수


1

스택에서 이미 활동을 시작할 때 검은 배경을 피하기 위해 다음을 추가 overridePendingTransition(0,0)했습니다 onStart().

@Override
protected void onStart() {
    overridePendingTransition(0,0);
    super.onStart();

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