Android Transition Animation (TransitionManager, Transition, Scene) Tutorial |
기본
참조 : http://blog.stylingandroid.com/archives/2143
Layout 의 변화에 대한 animation 을 지원한다.
Layout 에 add, remove, move, resize, show, hide 등에 대한 기본 animation 을 지원한다.
<LinearLayout
android:id="@+id/layout_1"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="center"
android:orientation="vertical"
android:padding="@dimen/margin">
<TextView
android:id="@+id/item_1a"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/item_height"
android:background="@color/red"
android:text="Item 1a"
android:gravity="center"
android:textAppearance="@style/Text"
android:layout_margin="@dimen/margin"/>
<TextView
android:id="@+id/item_1b"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minHeight="@dimen/item_height"
android:background="@color/green"
android:text="Item 1b"
android:gravity="center"
android:textAppearance="@style/Text"
android:layout_margin="@dimen/margin"/>
</LinearLayout>
private ViewGroup mLayout1;
@Override
public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_part1, container, false);
mLayout1 = (ViewGroup) view.findViewById(R.id.layout_1);
mLayout1.findViewById(R.id.item_1a).setOnClickListener(this);
mLayout1.findViewById(R.id.item_1b).setOnClickListener(this);
return view;
}
@Override
public void onClick(View v) {
int selected = mLayout1.indexOfChild(v);
TransitionManager.beginDelayedTransition(mLayout1, new ChangeBounds());
mLayout1.removeView(v);
mLayout1.addView(v, selected == 0 ? mLayout1.getChildCount() : 0);
}
TransitionManager.beginDelayedTransition( ViewGroup, Transition );
Transition 에 원하는 animation type 을 지정해주면, 내부에서 알아서 AnimatorSet 을 만들고 animation 을 수행한다.
Animation 을 수행하기 전에 view 의 id 를 기준으로 view 의 상태를 감시한 후 이를 바탕으로 animation 을 만든다.
Compat
https://github.com/guerwan/TransitionsBackport
Transition Backward Compat 을 위한 녀석.
Scene 정의하여 Scene 간의 Transition 하기
참조 : http://blog.stylingandroid.com/archives/2162
Scene 을 이용해서 Transition 을 할 수도 있다.
이는 Scene 을 static view hierarchy 로 정의한 후, 이들간의 transition 을 지원하는 것이다.
TransitionManager.setTransition( Scene fromScene, Scene toScene, Transition transition );
setTransition을 통해 Scene 간의 animation 을 정의한다.
Scene.getSceneForLayout( ViewGroup container, int displayLayoutId, Context context ); // Scene 생성
Scene.setEnterAction( Runnable runnable ); // 해당 Scene 이 Loading 되는 상태에서 불림.
Scene.enter(); // 해당 scene 을 display 한다.
TransitionManager.transitionTo( Scene toScene )
transitionTo 를 통해 현재 Scene 에서 다음 scene 으로 transition 한다.
이 때 TransitionManager.setTransition 에 define 한 Transition 이 사용된다.
Transition 의 종류
ChangeBounds() // add, remove
Fade() // visibility
AutoTransition() // auto
AutoTransition 은 TransitionSet 이다.
<AutoTransition 구현내용>
TransitionSet transition = new TransitionSet();
transition.setOrdering( TransitionSet.ORDERING_TOGETHER );
transition.addTransition( new Fade( Fade.OUT ) ).addTransition( new ChangeBounds() ).addTransition( new Fade( Fade.IN ) );
Parent 가 다른 경우에 대한 Transition
parent 가 달라지는 animation 의 경우에는 예상치 못한 이상한 반응이 나오기도 한다.
Transition.setReparent( boolean reparent );
reparent 가 되는 경우는 위의 명령으로 reparent 를 true 로 줘야 예상한 반응이 나온다.
아직 구현이 완벽히 되지 않은 Transition type 들도 있어서 계속 관찰해야 한다.
'프로그래밍 놀이터 > 안드로이드, Java' 카테고리의 다른 글
[Android] Google Play Services 4.3 Release. (0) | 2014.04.09 |
---|---|
[android] how to input xml percentage sign (0) | 2014.04.09 |
[android] AutoCompleteTextView 때문에 Filterable 을 적용한 경우 example. (0) | 2014.04.08 |
[android] compat version mapfragment xml example. (0) | 2014.04.07 |
[android] Fake Message로 GCM 수신 테스트 하기. ( simulation ) (0) | 2014.04.07 |
댓글