Animations in Android
  • Introduction
  • About us
  • Basic animations
  • ConstraintLayout: Core concepts
  • I like to move it, move it!
  • Step 1
  • Step 2
  • Step 2: Solution
  • Step 3
  • Step 3: Solution
  • Step 4
  • Step 4: Solution
  • Step 5
  • Step 5: Solution
  • Step 6
  • Step 7
  • Step 7: Solution
  • Step 8
  • Step 8: Solution
  • MotionLayout
  • Party time!
  • Shared element transition
  • Adding a RecyclerView
  • Activity transitions
  • Adding a second Activity
  • Adding the shared element transition
  • You made it!
  • VectorDrawable
  • VectorDrawable: Solution
  • Using the VectorDrawable
  • RecyclerView item animation & self-contained MotionScene
  • Creating a self-contained MotionScene
  • Creating a self-contained MotionScene : Solution
  • Adding animations in the RecyclerView items: Step 1
  • Adding animations in the RecyclerView items: Step 2
  • RecyclerView animations step 2: Solution
  • Physic based animations
  • Implement a spring animation
  • Spring animation: Solution
  • The finish line!
Powered by GitBook
On this page

Spring animation: Solution

DetailActivity.kt
class DetailActivity : AppCompatActivity() {

    ...

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        ...

        val springForce = SpringForce(0f).apply {
            stiffness = SpringForce.STIFFNESS_LOW
            dampingRatio = SpringForce.DAMPING_RATIO_HIGH_BOUNCY
        }

        val springAnimationX = SpringAnimation(iv_avatar, DynamicAnimation.TRANSLATION_X).apply {
            spring = springForce
        }
        val springAnimationY = SpringAnimation(iv_avatar, DynamicAnimation.TRANSLATION_Y).apply {
            spring = springForce
        }
        
        var dX = 0f
        var dY = 0f

        root.setOnTouchListener { view, motionEvent ->
            when (motionEvent?.action) {
                MotionEvent.ACTION_DOWN -> {
                    dX = motionEvent.rawX
                    dY = motionEvent.rawY
                }

                MotionEvent.ACTION_MOVE -> {
                    val newX = motionEvent.rawX - dX
                    val newY = motionEvent.rawY - dY
                    iv_avatar.animate().translationX(newX).translationY(newY).duration = 0
                    springAnimationX.animateToFinalPosition(0f)
                    springAnimationY.animateToFinalPosition(0f)
                }
            }
            true
        }
    }

    companion object {
        ...
    }
}
PreviousImplement a spring animationNextThe finish line!

Last updated 6 years ago