2011-11-30 3 views
30

은 내가 잘 만약 startActivity() 또는 종료()Android 애플리케이션에서 한 번에 모든 활동 전환을 변경하는 방법은 무엇입니까?

activity.overridePendingTransition(R.anim.activity_close_enter, R.anim.activity_close_exit);

뒤에 다음 코드를 사용하여 작업 전환을 변경할 수 있습니다 알고하지만 난 내 응용 프로그램에서 열 개 활동이 있다면, 내가 그 열 번을해야; 수정하기가 어렵습니다. 그래서 한 번에 응용 프로그램 내의 모든 활동에 대한 전환을 설정하는 방법이 있는지 궁금합니다. AndroidManifest.xml에 해당 구성이 있습니까?

감사합니다.

답변

52

먼저 고해상도의 <style>이 같은/styles.xml을 만들려면 :

<style name="YourTheme" parent="android:Theme.Translucent"> 
     ... 
     <item name="android:windowAnimationStyle">@style/YourAnimation.Activity</item> 
    </style> 

:

<style name="YourAnimation.Activity" parent="@android:style/Animation.Activity"> 
     <item name="android:windowEnterAnimation">@anim/your_in_down</item> 
     <item name="android:windowExitAnimation">@anim/your_out_down</item> 
    </style> 

그런 다음 같은 파일, 테마에 스타일을 적용 할 수 있습니다 마지막으로 매니페스트의 활동에 주제를 적용하십시오.

<activity 
     android:name=".YourActivity" 
     android:theme="@style/YourTheme" /> 

R 참조 :

+20

! 사실, 조금 변경됩니다 :'' –

+0

@DavidLiu, 그들이 작업하는 것처럼 열린 애니메이션 보이지만 가까운 애니메이션을 적용 해달라고 – toobsco42

+0

@GenLiu 당신이 날 당신에게 보여줄 수 있습니다. xml 예제? 난 그냥 openexit과 close의 차이점을 볼 수 없다. 예를 들어 –

13

내가 여기이 대답했습니다 알고 있지만 나는 내에서 한 것입니다. 우리는 여전히 API 14를 지원하므로 API 22 (slide_in_right, slide_out_left)에서 프로젝트를 끌어 와야하는 일부 애니메이션이 누락되었습니다. 이것이하는 일은 새로운 액티비티를 열고 닫는 것을 왼쪽으로 밀어 낼 때 화면에서 슬라이드하는 것입니다. 다시 누르면 이전 화면의 왼쪽에서 슬라이딩하고 현재 화면에서는 오른쪽으로 닫는 반대의 작업을 수행합니다.

<style name="YourTheme" parent="android:Theme.Translucent"> 
    ... 
    <item name="android:windowAnimationStyle">@style/YourAnimation.Activity</item> 
</style> 

<style name="YourAnimation.Activity" parent="@android:style/Animation.Activity"> 
    <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item> 
    <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item> 
    <item name="android:activityCloseEnterAnimation">@android:anim/slide_in_left</item> 
    <item name="android:activityCloseExitAnimation">@android:anim/slide_out_right</item> 
</style> 
+0

바로 API 22 라이브러리에서 API 22의 소스를 다운로드하면 애니메이션 폴더에 저장됩니다. – JPM

6

내 솔루션은 대부분 JPM 대답과 같습니다. 그러나 여기에 필요한 추가 파일이 있습니다.

<!-- 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/colorPrimary</item> 
    <item name="android:windowAnimationStyle">@style/CustomActivityAnimation</item> 

</style> 

<style name="CustomActivityAnimation" parent="@android:style/Animation.Activity"> 
    <item name="android:activityOpenEnterAnimation">@anim/slide_in_right</item> 
    <item name="android:activityOpenExitAnimation">@anim/slide_out_left</item> 
    <item name="android:activityCloseEnterAnimation">@anim/slide_in_left</item> 
    <item name="android:activityCloseExitAnimation">@anim/slide_out_right</item> 
</style> 

고해상도 폴더 아래 ANIM 폴더를 생성하고이 네 개의 애니메이션 파일 생성 :

slide_in_right.xml

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="100%p" android:toXDelta="0" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 

slide_out_left.xml

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="0" android:toXDelta="-100%p" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 

slide_in_left.xml

을 01 231,247,882,

slide_out_right.xml 그것은 작동

<?xml version="1.0" encoding="utf-8"?> 

<set xmlns:android="http://schemas.android.com/apk/res/android"> 
    <translate android:fromXDelta="0" android:toXDelta="100%p" 
     android:duration="@android:integer/config_mediumAnimTime"/> 
</set> 
+0

안드로이드 6 (huawei p8) – qkx

+0

내 huawei gPlay mini (Android 6) 및 Nexus 9 (Android 7)에서 원활하게 작동합니다. 이 프로젝트를 실행하십시오 : https://github.com/ShohanAhmed/Android-Activity-Transition-Custom-Animation –

+0

문제를 조사한 결과, 부분적으로 옳았습니다. 내 휴대 전화에서도 실행 중이지만 새로운 활동을 표시하기 위해 의도를 호출했을 때만 활동합니다. 위젯에서 일부 활동을 열고 대기중인 의도를 사용하려면 해당 활동이 작동하지 않습니다. 이 경우 유일한 옵션은 내가 원래 언급 한 것처럼 코드에서 프로그래밍 방식으로 애니메이션을 설정하는 것입니다. – qkx

관련 문제