안드로이드에서 애니메이션없이 활동을 전환하는 방법은 무엇입니까?


164

FLAG_ACTIVITY_NO_ANIMATIONAndroidManifest 파일에서 Intent 플래그 를 올바르게 사용하려면 어떻게 해야합니까? 내 문제가 사소한 것이라고 생각하지만 좋은 예나 해결책을 찾을 수 없습니다.

    <intent-filter>
        <data android:name="android.content.Intent.FLAG_ACTIVITY_NO_ANIMATION" />
    </intent-filter>

그러나 compliator는 오류를보고 data하지 않지만 올바르지 않습니다. 액티비티 간 전환시 애니메이션을 비활성화하고 싶습니다. getWindow().setWindowAnimations(0);대신 onCreate 또는 onResume에서 사용할 수 있지만 플래그를 사용하는 것이 더 좋습니다.

코드에서도 사용할 수 있습니다.

    Intent intent = new Intent(v.getContext(), newactivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    getContext().startActivity(intent);

그러나 Android Manifest 에서이 플래그를 사용하고 싶습니다. 두 번째 활동에서 첫 번째 활동으로 돌아 오는 경우에도 애니메이션을 비활성화합니다.


활동 또는 전체 응용 프로그램에 대한 입력, 종료 애니메이션을 정의하여 테마를 사용하는 sugestion을 발견했습니다. 누군가 나에게 그것에 대해 더 많은 정보를 줄 수 있습니까?
woyaru

답변:


268

스타일을 만들 수 있습니다.

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

매니페스트에서 활동의 테마로 설정하십시오.

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

사용자 정의 입력 및 종료 애니메이션을 지정하는 스타일을 정의 할 수도 있습니다. http://developer.android.com/reference/android/R.attr.html#windowEnterAnimation


고마워, 이것은 다른 작업 친화력을 가진 최근에서 제외 된 투명 / 대화 테마 활동에 특히 효과적입니다. 이것이 없으면 애니메이션은 대화 상자가 열리면 매우 이상한 결과를 계속 보여줍니다!
3c71

이것은 더 이상 Lollipop / Android 5.0에서 작동하지 않는 것 같습니다?
kenyee

나는 안드로이드 5를 가지고 있으며 그것은 나를 위해 작동합니다. 내 앱 스타일은 다음과 같습니다. <style name = "AppTheme"parent = "Theme.AppCompat.Light.DarkActionBar"> <item name = "android : windowAnimationStyle"> @ null </ item> </ style>
eatyourgreens

6.0에서도 완벽하게 작동합니다. 좋은 팁. 아래에서 묻는 것처럼 * 응용 프로그램을 처음 시작할 때 발생하는 애니메이션을 비활성화하는 방법이 궁금합니다 ...!
Fattie

5
AppCompatActivity를 확장하면 충돌이 발생합니다
Mike6679

191

컨텍스트가 활동 인 경우 overridePendingTransition 을 호출 할 수 있습니다 .

startActivity (Intent)의 특징 중 하나 직후에 호출하거나 다음에 수행 할 명시 적 전환 애니메이션을 지정하기 위해 완료하십시오.

따라서 프로그래밍 방식으로 :

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

adb를 통해서도 할 수 있습니까?
안드로이드 개발자

@TalAngel은 overridePendingTransitionAPI 레벨 5에 추가되었습니다. "모든"Android 버전에서는 작동하지 않지만 5보다 높은 API 레벨을 목표로하는 것 같습니다.
Bruno Bieri

43

이 코드를 사용해보십시오

this.startActivity(new Intent(v.getContext(), newactivity.class).addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION));

1
이것은 서비스에서 활동을 시작할 때 실제로 도움이됩니다.
DearDhruv

24

전환하고 싶지 않은 모든 활동 에서이 작업을 수행 할 수도 있습니다.

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

나는 당신이 당신의 활동 스타일을 망칠 필요가 없기 때문에이 접근법을 좋아합니다.


좋은 팁. * 앱을 처음 시작할 때 발생하는 애니메이션을 비활성화하는 방법이 궁금합니다 . 방법이 있습니까?!
Fattie

@Fattie 실행 활동의 onStart () 메소드를 대체하고 동일한 코드를 입력하십시오.
Jawad Adil


4

다음은 minSdkVersion 14삽입해야하는 한 낮은 라이너 솔루션입니다 res/styles.xml.

<item name="android:windowAnimationStyle">@null</item>

이렇게 :

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        ...
        <item name="android:windowAnimationStyle">@null</item>
    </style>
    ...
</resources>

건배!


3

테마 스타일의 선은 제대로 작동하지만 애니메이션이 흰색 화면으로 바뀝니다. 특히 느린 전화에서는 정말 짜증납니다. 따라서 즉각적인 전환을 원한다면 이것을 테마 스타일로 사용할 수 있습니다.

<item name="android:windowAnimationStyle">@null</item>
<item name="android:windowDisablePreview">true</item>

2

안드로이드를 재정의하는 나만의 스타일 만들기 : 테마

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

그런 다음 매니페스트에서 다음과 같이 사용하십시오.

<activity android:name=".MainActivity"
    android:theme="@style/noAnimationStyle">
</activity>

0

의도를 시작한 후에이 코드를 사용할 수 있습니다.

Intent intent = new Intent(Activity1.this, Activity2.class);
overridePendingTransition(0, 0);
intent.setFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
startActivity(intent);

사용하는 경우 의도는 애니메이션이나 전환없이 작동합니다

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