private void animate(float[] movements, int duration, boolean bounce, AnimatorListener listener) { if (mAbAnimation.isRunning()) { mAbAnimation.cancel(); } mAbAnimation = ObjectAnimator.ofFloat(this, "translationY", movements); mAbAnimation.setDuration(duration); if (listener != null) { mAbAnimation.addListener(listener); } if (mShadow != null) { if (mShadowAnimation.isRunning()) { mShadowAnimation.cancel(); } mShadowAnimation = ObjectAnimator.ofFloat(mShadow, "translationY", movements); mShadowAnimation.setDuration(duration); if (bounce) { AnimatorUtils.bounceAnimator(mShadowAnimation, movements, 5, 100); } else { mShadowAnimation.start(); } } if (bounce) { AnimatorUtils.bounceAnimator(mAbAnimation, movements, 5, 100); } else { mAbAnimation.start(); } }