1.MotionLayout 이란?
모션과 위젯 애니메이션을 관리하는 사용할 수 있는 레이아웃 유형 이다.
MotionLayout은 ConstraintLayout 서브 클래스 이다.
2 . MotionLayout 을 사용해서 얻는 이점
2-1. MotionLayout은 레이아웃 전환과 복잡한 모션 처리 사이를 연결하며 속성 애니메이션 프레임워크 , TransitionManager 및 CoordinatorLayout 사이의 혼합된 기능을 제공한다.
2-2. MotionLayout을 사용하여 레이아웃 속성을 애니메이션으로 보여줄수있다.
검색 가능 전환 ? 을 지원한다. ( 터치 입력과 같은 일부 조건에 따라 전환 내의 포인트를 즉시 표시. )
키프레임도 지원 하므로 사용자의 필요에 맞게 완전히 맞춤설정된 전환을 사용.
*키프레임 : 시작 시간과 종료 시간을 지정하고 그 사이에 움직임과 같은 효과를 넣는 작업
2-3. MotionLayout은 완전히 선언 가능하므로, 복잡도에 상관없이 XML로 모든 전환을 설명할 수 있습니다.
3. MotionLayout을 분석해보자.
<MotionScene xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:motion="http://schemas.android.com/apk/res-auto">
<Transition
motion:constraintSetStart="@+id/start"
motion:constraintSetEnd="@+id/end"
motion:duration="1000">
<OnSwipe
motion:touchAnchorId="@+id/button"
motion:touchAnchorSide="right"
motion:dragDirection="dragRight" />
</Transition>
<ConstraintSet android:id="@+id/start">
<Constraint
android:id="@+id/button"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginStart="8dp"
motion:layout_constraintBottom_toBottomOf="parent"
motion:layout_constraintStart_toStartOf="parent"
motion:layout_constraintTop_toTopOf="parent" />
</ConstraintSet>
<ConstraintSet android:id="@+id/end">
<Constraint
android:id="@+id/button"
android:layout_width="64dp"
android:layout_height="64dp"
android:layout_marginEnd="8dp"
motion:layout_constraintBottom_toBottomOf="parent"
motion:layout_constraintEnd_toEndOf="parent"
motion:layout_constraintTop_toTopOf="parent" />
</ConstraintSet>
</MotionScene>
<레퍼런스 기본 예제>
<Transition> 모션의 기본정의
- motion:constraintSetStart / motion:constraintSetEnd 시작 종료 모션의 포인트
위의 포인트들은 나중에 MotionScene에서 참조하여 정의됨.
-motion:duration 은 모션 완료되는데 걸리는 시간.
-motionInterpolator 은 애니메이션의 보간처리?
<OnSwipe>를 사용하면 터치를 통해 모션을 제어할수있음.
- motion:touchAnchorId 는 컨트롤 할 수 있는 뷰를 나타냄.
-motion:touchAnchorSide ??
-motion:dragDirection 는 진행률 증가?
<ConstraintSet> 은 제약조건을 정의 하고 엔드포인트마다 정의함. (포인트마다 있을필요는 없는듯.?)
<ConstaintSet> 안에 <Constraint>가 정의됨.
---Constraint 기타 속성들.
- alpha
- visibility
- elevation
- rotation, rotationX, rotationY
- translationZ translationY translationX
- scaleX, scaleY
<CustomAttribute> 는 <ConstaintSet> 을 변경할때 사용?
4. MotionLayout으로 무엇을 만들수있을까?
예제 따라한것.
https://github.com/ShinHoChull/MotionLayout
음.. 여러개 생각난건 있는데..
한번 해본다음에 수정사항 적용해야겠음.
5. MotionLayout을 사용해서 느낀점.
백문불여일견 역시 한번 해보니 이해가 빨랐다..
나는 여태까지 코드로 수정했는데.. MotionLayout 으로 이렇게 될줄이야..
오래전에 나온거긴한데 .. 세삼 새롭네 ..
이제 코드로 애니메이션 시작 종료를 캐치할수있는지 좀 확인해봐야겠다..
가능하다면 여러가지 복합적으로 할 수 있을듯..?