220405 애니메이션 훑기
안드로이드 애니메이션
Animation UseCase
Click Animation?
AnimatedStateListDrawable
state 에 따라 변경 가능
iv.setOnClickListener{
it.isSelected = true;
}
AnimatedVectorDrawable
->vector drawable? 개발자 손이 감
shape Shifer
PathData 간 morph효과
ripple
Activity, Fragment 전환 시 콘텐츠 이어지는 것처럼 보여주기
프로필 사진을 확대하거나
이미지 목록 화면에서 사용할때
transition 동일한 이름으로 설정해서 연결
-> 실행
ActivityCompat.startActivity(context, intent,
!!! ActivityOptionsCompat.makeSceneTransitionAnimation(context, view, view.transitionName).toBundle!!!)
-> 수신
override fun onCreate(savedInstanceState:Bundle?){
window.sharedElementEnterTransition = //윈도우의 속성을 지정해줘야한다.
TransitionSet().apply{
interpolator = Overshootinterpolator(0.7f) //튕기는 느낌(바운스)
ordering = TransitionSet.ORDERING_TOGETHRER
addTransition(ChangreBounds().apply{
pathMotion = ArcMotion() //일직선이 아닌 부드럽게 이동하는 아크모션
})
addTransition(ChangeTransform()) //센터크롭->센터인사이트로 스케일 타입 변경 등
addTransition(ChangeClipBounds())
addTransition(ChangeImageTransform())
}
}
// 추가적인 세팅 도 있다.
super.onCreate(savedInstanceState)
}
Activity / Fragment 화면 전환 시
단순 animation 설정
tab 좌우 이동?
액티비티에선
activity.overridePendingTransition()
fragment에선
fragmentManager.beginTransition
.setCustomAnimation(
R.anim.slide_in_right, //enter
R.anim.slide_out_left, //exit
)
.replcae()
.commit()
묶어서
공통으로
<alpht />
<translate/>
<sclae/>
<rotation/>
<set /> <!--중첩가능-->
TransitionManager
상태에 따라 layout이 변경되어야하는 경우
TransitionManager 등을 사용할 수 있다.
if constraint Layout을 사용하고 있다면 guideline을 활용하는 것이 편리함
parent에 chain을 거는 대신 bottomGuideLine, barrier 등으로 변경하는 등.
사진 편집 모드 / 폴더블 상태 등에서 사용하면 좋을듯
val layout = binding.root
val constraintSet = ConstraintSet().apply{
clone(layout)
if(fold){
setGuidelinePercent(R.id.fold_guide, 0.5f)
}else{
setGuidelinePercent(R.id.fold_guide, 1f)
}
}
TransitionManager.beginDelayedTransition (layout)
constraintSet.applyTo(layout)
이외에도
Animator, ViewPropertyAnimator, DynamicAnimation, LayoutTransition,CircularReveal,MotionLayout
등 다양함