활동 전환에서 페이드 애니메이션을 수행하는 방법은 무엇입니까?


89

로고 활동과 주요 활동 사이의 전환 효과를 코딩하고 있지만 활동이 사라지기 전에 맨 위로 이동하는 문제가 있습니다.

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false" >

    <alpha
        android:duration="2000"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" >
    </alpha>

</set>

소멸 효과 만 얻기 위해이 코드를 어떻게 개선 할 수 있습니까?

답변:


237

자신 만의 .xml 애니메이션 파일 을 만들어 새 애니메이션 을 페이드 Activity인하 고 현재 페이드 아웃 할 수 있습니다 Activity.

fade_in.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
           android:interpolator="@android:anim/accelerate_interpolator"
           android:fromAlpha="0.0" android:toAlpha="1.0"
           android:duration="500" />

fade_out.xml

<?xml version="1.0" encoding="utf-8"?>
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
           android:interpolator="@android:anim/accelerate_interpolator"
           android:fromAlpha="1.0" android:toAlpha="0.0"
           android:fillAfter="true"
           android:duration="500" />

다음과 같은 코드에서 사용하십시오. (Inside your Activity)

Intent i = new Intent(this, NewlyStartedActivity.class);
startActivity(i);
overridePendingTransition(R.anim.fade_in, R.anim.fade_out);

위의 코드는 현재 활성 상태 Activity를 페이드 아웃하고 새로 시작된 페이드 Activity인하여 부드러운 전환을 제공합니다.

업데이트 : @Dan J는 내장 된 Android 애니메이션을 사용 하면 성능이 향상 된다는 점을 지적했습니다 . 내장 애니메이션으로 작업하려면 다음을 사용하십시오.

overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);

리소스 ID에 액세스하는 android.R대신 참조를 참조 R하십시오.

업데이트 : 이제 API 레벨 19에 도입 된 Transition 클래스를 사용하여 전환 을 수행하는 것이 일반적 입니다.


65
내장 된 Android 애니메이션을 사용하면 더 부드럽게 전환되는 것 같습니다. overridePendingTransition(android.R.anim.fadein, android.R.anim.fadeout);이러한 파일을 보면 사용자 정의 애니메이션을 개선하는 방법에 대한 힌트를 얻을 수 있습니다 (예 : 페이드 아웃이 페이드 아웃보다 오래 지속되도록 함).
Dan J

42
Undescore : overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out);:)
AlvaroSantisteban 2014

overridePendingTransition onCreate 또는 모든 인 텐트를 사용해야합니까? 아니면 내가 원하는 것에 달려 있습니까? 감사.
Ricardo

19
"재정의"없는 옵션이 있습니다.Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getContext(), android.R.anim.fade_in, android.R.anim.fade_out).toBundle(); startActivity(intent, bundle);
oleynikd

1
위의 전환은 개발자 옵션에서 활성화 된 경우에만 실행됩니다 ( stackoverflow.com/a/30422015/2914140 참조) .
CoolMind

22

간단하고 깔끔하기 때문에 oleynikd의 답변을 다시 게시하십시오.

Bundle bundle = ActivityOptionsCompat.makeCustomAnimation(getContext(),
    android.R.anim.fade_in, android.R.anim.fade_out).toBundle(); 
startActivity(intent, bundle);

overridePendingTransition은 일부 모바일에서 작동하지 않고 Enes의 솔루션이 그리 좋지 않기 때문에이 대답은 올바른 대답이어야합니다.
Hugo Passos 2017

19

overridePendingTransition이 일부 모바일에서 작동하지 않거나 장치 설정에 따라 다르기 때문에 아래와 같은 onCreate 메서드에서 활동에 애니메이션을 추가 할 수도 있습니다.

View view = findViewById(android.R.id.content);
Animation mLoadAnimation = AnimationUtils.loadAnimation(getApplicationContext(), android.R.anim.fade_in);
mLoadAnimation.setDuration(2000);
view.startAnimation(mLoadAnimation);

1
이전 또는 상위 활동에 대한 애니메이션을 처리하는 방법은 무엇입니까?
Mehmed 2014 년

9
부모 활동으로 다시 전환하기위한 애니메이션을 설정하려면 다음 코드를 사용하십시오. @Override public void onBackPressed() { super.onBackPressed(); overridePendingTransition(R.anim.fade_in, R.anim.fade_out); }
John Verco 2014 년

15

style.xml 파일 에서이 코드를 사용할 수도 있으므로 activity.java에 다른 내용을 작성할 필요가 없습니다.

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowAnimationStyle">@style/AppTheme.WindowTransition</item>
</style>

<!-- Setting window animation -->
<style name="AppTheme.WindowTransition">
    <item name="android:windowEnterAnimation">@android:anim/fade_in</item>
    <item name="android:windowExitAnimation">@android:anim/fade_out</item>
</style>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.