/** 清除 */ private void disappeared() { isDisappear = true; invalidate(); if (mListener != null) { mListener.onDisappear(mDragCenter); } }
private void handleActionUp() { if (isOutOfRange) { // When user drag it back, we should call onReset(). if (GeometryUtil.getDistanceBetween2Points(mDragCenter, mInitCenter) < resetDistance) { if (mListener != null) mListener.onReset(isOutOfRange); return; } // Otherwise disappeared(); } else { // 手指抬起时,弹回动画 mAnim = ValueAnimator.ofFloat(1.0f); mAnim.setInterpolator(new OvershootInterpolator(4.0f)); final PointF startPoint = new PointF(mDragCenter.x, mDragCenter.y); final PointF endPoint = new PointF(mStickCenter.x, mStickCenter.y); mAnim.addUpdateListener( new AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { float fraction = animation.getAnimatedFraction(); PointF pointByPercent = GeometryUtil.getPointByPercent(startPoint, endPoint, fraction); updateDragCenter((float) pointByPercent.x, (float) pointByPercent.y); } }); mAnim.addListener( new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { if (mListener != null) mListener.onReset(isOutOfRange); } }); if (GeometryUtil.getDistanceBetween2Points(startPoint, endPoint) < 10) { mAnim.setDuration(10); } else { mAnim.setDuration(500); } mAnim.start(); } }