애니메이션_장바구니 추가 효과(animate)

소정·2024년 8월 21일
0

Kotlin

목록 보기
28/40

메인화면에 장바구니 담기 아이콘 클릭 시 장바구니로 담기는 듯한 애니메이션 구현

사용법
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에 카피해 두고 서 위치를 이동 시키는 애니메이션을 붙여준다

profile
보조기억장치

0개의 댓글