2010-12-15 7 views
12

2 개의 XML 파일이 있다고 가정하고 사용자의 일부 버튼을 눌러 내 활동이 해당 내용을 setContentView에서 볼 것입니다. 콘텐츠보기 변경을위한 전환 애니메이션을 변경할 수 있습니까?동일한 활동에서보기를 변경할 때 전환 애니메이션을 수행 할 수 있습니까?

지금까지 새로운 활동을 시작하는 데 적합한 super.overridePendingTransition()을 보았습니다. 그러나 예제는 새로운 활동을 시작하지 않고 단지 현재 활동의 레이아웃을 변경합니다.

답변

31

Mathias Lin이 잘 설명했습니다.

Android 프레임 워크에서 제공하는 기본 주식 애니메이션을 항상 사용할 수 있습니다.

Heres는 예제 코드 : 당신의 부모보기를 보유하고 활동의 어떤에서

boolean isFirstXml=evaluatingConditionFunction(); 
LayoutInflater inflator=getLayoutInflater(); 
View view=inflator.inflate(isFirstXml?R.layout.myfirstxml:R.layout.myseconxml, null, false); 
view.startAnimation(AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right)); 
setContentView(view); 

콜이.

맞춤 애니메이션의 경우 개발자 문서를 방문 할 수 있습니다. Heres the documentation 링크가 있습니다.

7

예, 원하는 거의 모든보기에서 애니메이션을 적용 할 수 있습니다. 그냥 via view.startAnimation(animation);

각각의 레이아웃 (콘텐츠보기)의 외부보기 그룹을 가져 와서 애니메이션을 적용합니다. 원하는 애니메이션의 종류에 따라 두 레이아웃을 모두 팽창 /로드하지만 그 중 하나를 숨긴 다음 스왑하는 것이 좋습니다. 어떤 종류의 전환을 염두에 두십시오.

예를 들어 : 알파 전환을 수행하는 경우 현재 레이아웃에서 애니메이션을 끝낼 때 (AnimationListener), 컨텐츠 레이아웃을 새 레이아웃으로 설정하고 내용을 다시 페이드 할 때 alphaAnimation을 실행합니다. 다른 alphaAnimation을 통해.

3

더 나은 해결책은 ViewFlipper를 사용하는 것입니다.보기를 변경하면 애니메이션을 할 수있는 FrameLayout입니다. 이어서

<ViewFlipper 
    android:id="@+id/[your_id_here]" 
    android:inAnimation="..." 
    android:outAnimation="..." 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
     <RelativeLayout 
      <!--Your first layout --> 
     </RelativeLayout> 
     <RelativeLayout 
      <!--Your second layout --> 
     </RelativeLayout> 
</ViewFlipper> 

setDisplayedChild(int) 또는 showNext() 또는 showPrevious로보기를 전환. 왼쪽 및 오른쪽으로 다른 애니메이션을 사용하려면 전환하기 전에 코드에 inAnimationoutAnimation을 설정해야합니다.

보다 완벽한 예제는 here입니다.

+0

감사합니다. 'oldActivity.startActivity (newActivityIntent);를 사용하여 수행 한 애니메이션으로 두 번째 활동을 시작하는 것보다 훨씬 간단합니다. oldActivity.overridePendingTransition (R.anim.slide_in_up, R.anim.slide_out_up);' –

관련 문제