2013-10-28 3 views
3

활동 애니메이션의 z 순서를 뒤집는 방법이 있습니까? 기본적으로 새로운 액티비티를 시작할 때 백 스택에 추가되고 이전 액티비티의 창 위에 창이 추가됩니다. 때로는 뒤로 되돌아 올 때 뒤쪽에서 가져온 활동이 맨 위 활동 아래에 창을 표시합니다. 대부분의 시간은 완전히 이해가되지만 그 행동에 다음과 같은 문제가 있습니다.Android에서 활동 애니메이션의 z 순서 변경

어딘가에 앱 구조를 가리키는 위젯이 있습니다. 따라서 사용자가 작업 표시 줄에서 위로 버튼을 클릭 할 때 수동으로 백 스택을 만들어야합니다. 하지만 실제로는 새로운 액티비티를 가리키는 새로운 의도로 startActivity를 호출합니다. 여기에는 back stack이 첨부되어 있습니다. 여기에 문제가 생깁니 다. 액티비티는 실제로는 정상적으로 움직입니다. 표준 방식.

다음 그림 여기 enter image description here

의 흐름을 볼 수있는 내가 다시 스택 작업을 다시 부모 활동에 사용자를 탐색하고 방법에 대한 코드입니다. 아래쪽에서도 애니메이션의 스크린 샷을 볼 수 있습니다. 기본적으로 상단에있는 창은 하단에 있어야합니다 (앱 하이라이팅에서 더 높음). 참고로 모든 애니메이션은 표준 XML 윈도우 애니메이션을 통해 수행되고 overridePendingTransition 호출로 시작됩니다. 나는 그 애니메이션에서 Z-조정을 수정했지만, 그것은 단지 하나의 특정 애니메이션을 다양한 계층에 영향을 미치지 않는 것처럼 보인다 ..

if (NavUtils.shouldUpRecreateTask(this, upIntent)) { 
     NavUtils.navigateUpTo(this, upIntent); 
} else { 
     TaskStackBuilder.create(this) 
         .addNextIntentWithParentStack(upIntent) 
         .startActivities(); 

}

enter image description here

답변

0

을 오래된 질문,하지만 난 ' ve도 똑같은 문제가있었습니다. 해결책은 애니메이션 정의에 android:zAdjustment="top" 또는 android:zAdjustment="bottom" 속성을 추가하는 것입니다. 예 :

nothing_background.xml

<?xml version="1.0" encoding="utf-8"?> 
    <translate 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:zAdjustment="bottom" 
    android:duration="400" 
    android:fromXDelta="0%p" 
    android:toXDelta="0%p" > 
    </translate> 

fade_in_foreground.xml 전환 트리거를 사용하면 코드에서

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

:

Intent intent = new Intent(FromActivity.this, ToActivity.class); 
Bundle animate = ActivityOptions.makeCustomAnimation(getApplicationContext(), 
    R.anim.nothing_background, R.anim.fade_in_foreground).toBundle(); 
startActivity(intent, animate);