public void show() { mStatus = Status.STATUS_SMOOTH_UP; if (mAnimationListener != null) { mAnimationListener.onStart(); this.postDelayed( new Runnable() { @Override public void run() { mAnimationListener.onContentShow(); } }, 600); } ValueAnimator valueAnimator = ValueAnimator.ofInt(0, mMaxArcHeight); valueAnimator.addUpdateListener( new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { int value = (int) animation.getAnimatedValue(); mArcHeight = value; if (value == mMaxArcHeight) { duang(); } invalidate(); } }); valueAnimator.setDuration(800); valueAnimator.setInterpolator(new AccelerateInterpolator()); valueAnimator.start(); }