메인화면에 장바구니 담기 아이콘 클릭 시 장바구니로 담기는 듯한 애니메이션 구현
사용법
moveToCart(애미메이션 붙일 뷰,타켓 뷰)
private fun moveToCart(view: View, cartButton: View) {
val viewLocation = IntArray(2)
val cartLocation = IntArray(2)
view.getLocationOnScreen(viewLocation)
cartButton.getLocationOnScreen(cartLocation)
val startX = viewLocation[0].toFloat()
val startY = viewLocation[1].toFloat()
val targetX = cartLocation[0].toFloat()
val targetY = cartLocation[1].toFloat()
// 뷰의 스냅샷 생성
val bitmap = createViewSnapshot(view)
val imageView = ImageView(view.context)
imageView.setImageBitmap(bitmap)
imageView.layoutParams = ViewGroup.LayoutParams(view.width, view.height)
imageView.x = startX
imageView.y = startY
// 원본 뷰 숨기기 (선택 사항)
view.visibility = View.INVISIBLE
// 부모 뷰 그룹에 ImageView 추가
val parentViewGroup = view.rootView as ViewGroup
parentViewGroup.addView(imageView)
// 애니메이션
imageView.animate()
.x(targetX)
.y(targetY)
.setDuration(500)
.withEndAction {
parentViewGroup.removeView(imageView)
// 원래 뷰는 원래 크기와 위치로 돌아갑니다.
view.visibility = View.VISIBLE
}
.start()
}
private fun createViewSnapshot(view: View): Bitmap {
// 비트맵 생성
val bitmap = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888)
val canvas = Canvas(bitmap)
view.draw(canvas)
return bitmap
}
애니메이션 줄 뷰를 Canvas에 카피해 두고 서 위치를 이동 시키는 애니메이션을 붙여준다