2013-05-04 7 views
0

번역 할 거리가 런타임에 결정되므로 (자식) 레이아웃을 프로그래밍 방식으로 구현해야합니다. 다음 번역 애니메이션을 설정했습니다. 예를 들어, 레이아웃을 아래로 슬라이드 시키려면동적으로 레이아웃에 애니메이션 적용

TranslateAnimation tanim = new TranslateAnimation(
     TranslateAnimation.ABSOLUTE, 0.0f, 
     TranslateAnimation.ABSOLUTE, 0.0f, 
     TranslateAnimation.ABSOLUTE, 0.0f, 
     TranslateAnimation.ABSOLUTE, 100); 

을 설정하십시오.

문제 1 :이 레이아웃은 애니메이션이 끝난 후 원래 위치로 되돌아갑니다. 위치를 유지하기 위해 내가 설정해야 할 것이 있습니까? 나는 부모 레이아웃 (부모 레이아웃은 layout_width="wrap_content" 매개 변수를가집니다) 밖으로 이동되는 레이아웃에 의해 발생하는 것으로 판단됩니다. 이 경우 어떻게하면 부모 레이아웃을 조정하여 하위 레이아웃 변경을 수용 할 수 있습니까?

문제점 2 : 감속 효과를 얻으려면 사용자 정의 보간 클래스를 제공해야합니까? 그렇다면 예를 어디에서 찾을 수 있습니까? xml에서이 작업을 수행 할 수 있습니다

android:interpolator="@android:anim/accelerate_interpolator" 

가속화/감속 효과를 프로그래밍 방식으로 얻으려면 이에 해당하는 Android 코드가 있습니까?

+2

'Translate Animation'은 뷰/레이아웃이 아닌 픽셀을 움직이기 때문에 레이아웃의 'Layout Params'를 새로운 위치로 설정해야합니다. 레이아웃은 원래 위치에 있지만 보이지 않습니다. –

+0

즉 실제로 나는 지금 가지고있는 문제입니다. 예를 들어 원래 레이아웃에서 100dp와 같이 클릭 감지 영역을 이동하는 방법에 대한 몇 가지 예를 보여줄 수 있습니까? – Neoh

+0

예 여기에 예제 코드로 주어진 완전한 대답이 있습니다. http://stackoverflow.com/a/15880375/1939564 –

답변

2

애니메이션 후 위치를 유지하려면 fillAfter 속성을 사용해야합니다. 그리고 네 시스템 내에서 보간 객체에 내장 된 목록은 fillAfter에 대한 정보에 대한 Animation docsInterpolator docs을보기가 가속화와 공개 API

TranslateAnimation tanim = new TranslateAnimation(
     TranslateAnimation.ABSOLUTE, 0.0f, 
     TranslateAnimation.ABSOLUTE, 0.0f, 
     TranslateAnimation.ABSOLUTE, 0.0f, 
     TranslateAnimation.ABSOLUTE, 100); 
tanim.setFillAfter(true); 
tanim.setInterpolater(new DecelerateInterpolator()); 
//tanim.setInterpolater(new AccelerateInterpolator()); 

내에서 클래스를 interpolater 감속된다.

+1

** fillAfter ** 실제 레이아웃이 아니라 픽셀의 움직임을 유지 한 채로, 레이아웃/레이아웃의 '레이아웃 매개 변수'를 사용하여 새 위치로 이동합니다. –