android.animation.AnimatorSet#addListener ( )源码实例Demo

下面列出了android.animation.AnimatorSet#addListener ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: ZhuanLan   文件: SplashActivity.java
private void animateImage() {
    ObjectAnimator animatorX = ObjectAnimator.ofFloat(mSplashImage, View.SCALE_X, 1f, SCALE_END);
    ObjectAnimator animatorY = ObjectAnimator.ofFloat(mSplashImage, View.SCALE_Y, 1f, SCALE_END);

    AnimatorSet set = new AnimatorSet();
    set.setDuration(ANIMATION_DURATION).play(animatorX).with(animatorY);
    set.start();

    set.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            MainActivity.start(SplashActivity.this);
            SplashActivity.this.finish();
        }
    });
}
 
源代码2 项目: Android-Music-Player   文件: pagePrototype.java
public void open(final call Call, boolean from){
    int to = width;
    if(from){
        to = -width;
    }
    Set = new AnimatorSet();
    Set.setInterpolator(Ui.cd.TH);
    Set.playTogether(
            ObjectAnimator.ofFloat(this, "X", to, 0),
            ObjectAnimator.ofFloat(this, "Alpha", 100, 100)
    );
    Set.setDuration(0).start();
    Set.addListener(new animLis(){
        @Override
        public void onAnimationEnd(Animator animation) {
           Call.onCall(true);
            removeCatch();
        }
    });
}
 
private void hideFloatingDateView(boolean animated) {
    if (floatingDateView.getTag() != null && !currentFloatingDateOnScreen && (!scrollingFloatingDate || currentFloatingTopIsNotMessage)) {
        floatingDateView.setTag(null);
        if (animated) {
            floatingDateAnimation = new AnimatorSet();
            floatingDateAnimation.setDuration(150);
            floatingDateAnimation.playTogether(ObjectAnimator.ofFloat(floatingDateView, "alpha", 0.0f));
            floatingDateAnimation.addListener(new AnimatorListenerAdapter() {
                @Override
                public void onAnimationEnd(Animator animation) {
                    if (animation.equals(floatingDateAnimation)) {
                        floatingDateAnimation = null;
                    }
                }
            });
            floatingDateAnimation.setStartDelay(500);
            floatingDateAnimation.start();
        } else {
            if (floatingDateAnimation != null) {
                floatingDateAnimation.cancel();
                floatingDateAnimation = null;
            }
            floatingDateView.setAlpha(0.0f);
        }
    }
}
 
源代码4 项目: TelePlus-Android   文件: DrawerLayoutContainer.java
public void closeDrawer(boolean fast)
{
    cancelCurrentAnimation();
    AnimatorSet animatorSet = new AnimatorSet();
    animatorSet.playTogether(
            ObjectAnimator.ofFloat(this, "drawerPosition", 0)
    );
    animatorSet.setInterpolator(new DecelerateInterpolator());
    if (fast)
    {
        animatorSet.setDuration(Math.max((int) (200.0f / drawerLayout.getMeasuredWidth() * drawerPosition), 50));
    }
    else
    {
        animatorSet.setDuration(300);
    }
    animatorSet.addListener(new AnimatorListenerAdapter()
    {
        @Override
        public void onAnimationEnd(Animator animator)
        {
            onDrawerAnimationEnd(false);
        }
    });
    animatorSet.start();
}
 
源代码5 项目: Telegram-FOSS   文件: AndroidUtilities.java
public static void shakeView(final View view, final float x, final int num) {
    if (view == null) {
        return;
    }
    if (num == 6) {
        view.setTranslationX(0);
        return;
    }
    AnimatorSet animatorSet = new AnimatorSet();
    animatorSet.playTogether(ObjectAnimator.ofFloat(view, "translationX", dp(x)));
    animatorSet.setDuration(50);
    animatorSet.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            shakeView(view, num == 5 ? 0 : -x, num + 1);
        }
    });
    animatorSet.start();
}
 
源代码6 项目: AnimatedEditText   文件: AnimatedEditText.java
private void animatePopIn(final boolean reverse, AnimationEndListener listener) {
    float start = reverse ? getPaint().getTextSize() : 1;
    float end = reverse ? 1 : getPaint().getTextSize();
    ValueAnimator va = ValueAnimator.ofFloat(start, end);
    va.setInterpolator(new OvershootInterpolator());
    va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
        @Override
        public void onAnimationUpdate(ValueAnimator animation) {
            mAnimPaint.setTextSize((Float) animation.getAnimatedValue());
            AnimatedEditText.this.invalidate();
        }
    });
    mAnimSet = new AnimatorSet();
    if (listener != null) {
        mAnimSet.addListener(listener);
    }
    mAnimationsToPlay.clear();
    mAnimationsToPlay.add(va);
    if (mShouldAnimateCursor) {
        ValueAnimator animCursor = animateMoveCursor(reverse);
        mAnimationsToPlay.add(animCursor);
    }
    mAnimSet.playTogether(mAnimationsToPlay);
    mAnimSet.setDuration(200);
    mAnimSet.start();
}
 
源代码7 项目: Telegram-FOSS   文件: DrawerLayoutContainer.java
public void closeDrawer(boolean fast) {
    cancelCurrentAnimation();
    AnimatorSet animatorSet = new AnimatorSet();
    animatorSet.playTogether(
            ObjectAnimator.ofFloat(this, "drawerPosition", 0)
    );
    animatorSet.setInterpolator(new DecelerateInterpolator());
    if (fast) {
        animatorSet.setDuration(Math.max((int) (200.0f / drawerLayout.getMeasuredWidth() * drawerPosition), 50));
    } else {
        animatorSet.setDuration(250);
    }
    animatorSet.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animator) {
            onDrawerAnimationEnd(false);
        }
    });
    animatorSet.start();
}
 
源代码8 项目: EasyPhotos   文件: CaptureLayout.java
public void startTypeBtnAnimator() {
    //拍照录制结果后的动画
    if (this.iconLeft != 0)
        iv_custom_left.setVisibility(GONE);
    else
        btn_return.setVisibility(GONE);
    if (this.iconRight != 0)
        iv_custom_right.setVisibility(GONE);
    btn_capture.setVisibility(GONE);
    btn_cancel.setVisibility(VISIBLE);
    btn_confirm.setVisibility(VISIBLE);
    btn_cancel.setClickable(false);
    btn_confirm.setClickable(false);
    ObjectAnimator animator_cancel = ObjectAnimator.ofFloat(btn_cancel, "translationX", layout_width / 4, 0);
    ObjectAnimator animator_confirm = ObjectAnimator.ofFloat(btn_confirm, "translationX", -layout_width / 4, 0);

    AnimatorSet set = new AnimatorSet();
    set.playTogether(animator_cancel, animator_confirm);
    set.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            super.onAnimationEnd(animation);
            btn_cancel.setClickable(true);
            btn_confirm.setClickable(true);
        }
    });
    set.setDuration(200);
    set.start();
}
 
源代码9 项目: Telegram-FOSS   文件: VoIPActivity.java
private void hideRetry() {
    if (retryAnim != null)
        retryAnim.cancel();
    retrying = false;
    //bottomButtons.setVisibility(View.VISIBLE);
    ObjectAnimator colorAnim;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        colorAnim = ObjectAnimator.ofArgb(endBtnBg, "color", 0xFF45bc4d, 0xFFe61e44);
    } else {
        colorAnim = ObjectAnimator.ofInt(endBtnBg, "color", 0xFF45bc4d, 0xFFe61e44);
        colorAnim.setEvaluator(new ArgbEvaluator());
    }
    AnimatorSet set = new AnimatorSet();
    set.playTogether(
            colorAnim,
            ObjectAnimator.ofFloat(endBtnIcon, "rotation", -135, 0),
            ObjectAnimator.ofFloat(endBtn, View.TRANSLATION_X, 0),
            ObjectAnimator.ofFloat(cancelBtn, View.ALPHA, 0)//,
            //ObjectAnimator.ofFloat(bottomButtons, View.ALPHA, 1)
    );
    set.setStartDelay(200);
    set.setDuration(300);
    set.setInterpolator(CubicBezierInterpolator.DEFAULT);
    set.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            cancelBtn.setVisibility(View.GONE);
            endBtn.setEnabled(true);
            retryAnim = null;
        }
    });
    retryAnim = set;
    set.start();
}
 
源代码10 项目: magellan   文件: DefaultTransition.java
@Override
public final void animate(View from, View to, NavigationType navType, Direction direction, final Callback callback) {
  AnimatorSet animator = createAnimator(from, to, navType, direction);
  animator.addListener(new AnimatorListenerAdapter() {
    @Override
    public void onAnimationEnd(Animator animation) {
      callback.onAnimationEnd();
    }
  });
  animator.start();
}
 
源代码11 项目: TelePlus-Android   文件: VoIPActivity.java
private void hideRetry(){
    if(retryAnim!=null)
        retryAnim.cancel();
    retrying=false;
    //bottomButtons.setVisibility(View.VISIBLE);
    ObjectAnimator colorAnim;
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        colorAnim = ObjectAnimator.ofArgb(endBtnBg, "color", 0xFF45bc4d, 0xFFe61e44);
    } else {
        colorAnim = ObjectAnimator.ofInt(endBtnBg, "color", 0xFF45bc4d, 0xFFe61e44);
        colorAnim.setEvaluator(new ArgbEvaluator());
    }
    AnimatorSet set=new AnimatorSet();
    set.playTogether(
            colorAnim,
            ObjectAnimator.ofFloat(endBtnIcon, "rotation", -135, 0),
            ObjectAnimator.ofFloat(endBtn, "translationX", 0),
            ObjectAnimator.ofFloat(cancelBtn, "alpha", 0)//,
            //ObjectAnimator.ofFloat(bottomButtons, "alpha", 1)
    );
    set.setStartDelay(200);
    set.setDuration(300);
    set.setInterpolator(CubicBezierInterpolator.DEFAULT);
    set.addListener(new AnimatorListenerAdapter(){
        @Override
        public void onAnimationEnd(Animator animation){
            cancelBtn.setVisibility(View.GONE);
            endBtn.setEnabled(true);
retryAnim=null;
        }
    });
    retryAnim=set;
    set.start();
}
 
源代码12 项目: FancyAccordionView   文件: ItemAnimator.java
@Override
public void runPendingAnimations() {
    final AnimatorSet removeAnimatorSet = new AnimatorSet();
    removeAnimatorSet.playTogether(mRemoveAnimatorsList);
    mRemoveAnimatorsList.clear();

    final AnimatorSet addAnimatorSet = new AnimatorSet();
    addAnimatorSet.playTogether(mAddAnimatorsList);
    mAddAnimatorsList.clear();

    final AnimatorSet changeAnimatorSet = new AnimatorSet();
    changeAnimatorSet.playTogether(mChangeAnimatorsList);
    mChangeAnimatorsList.clear();

    final AnimatorSet moveAnimatorSet = new AnimatorSet();
    moveAnimatorSet.playTogether(mMoveAnimatorsList);
    mMoveAnimatorsList.clear();

    final AnimatorSet pendingAnimatorSet = new AnimatorSet();
    pendingAnimatorSet.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animator) {
            animator.removeAllListeners();
            dispatchFinishedWhenDone();
        }
    });
    // Required order: removes, then changes & moves simultaneously, then additions. There are
    // redundant edges because changes or moves may be empty, causing the removes to incorrectly
    // play immediately.
    pendingAnimatorSet.play(removeAnimatorSet).before(changeAnimatorSet);
    pendingAnimatorSet.play(removeAnimatorSet).before(moveAnimatorSet);
    pendingAnimatorSet.play(changeAnimatorSet).with(moveAnimatorSet);
    pendingAnimatorSet.play(addAnimatorSet).after(changeAnimatorSet);
    pendingAnimatorSet.play(addAnimatorSet).after(moveAnimatorSet);
    pendingAnimatorSet.start();
}
 
源代码13 项目: AndroidAnimationExercise   文件: PopupManager.java
public static void closePopup() {
	final RelativeLayout popupContainer = (RelativeLayout) Shared.activity.findViewById(R.id.popup_container);
	int childCount = popupContainer.getChildCount();
	if (childCount > 0) {
		View background = null;
		View viewPopup = null;
		if (childCount == 1) {
			viewPopup = popupContainer.getChildAt(0);
		} else {
			background = popupContainer.getChildAt(0);
			viewPopup = popupContainer.getChildAt(1);
		}

		AnimatorSet animatorSet = new AnimatorSet();
		ObjectAnimator scaleXAnimator = ObjectAnimator.ofFloat(viewPopup, "scaleX", 0f);
		ObjectAnimator scaleYAnimator = ObjectAnimator.ofFloat(viewPopup, "scaleY", 0f);
		if (childCount > 1) {
			ObjectAnimator alphaAnimator = ObjectAnimator.ofFloat(background, "alpha", 0f);
			animatorSet.playTogether(scaleXAnimator, scaleYAnimator, alphaAnimator);
		} else {
			animatorSet.playTogether(scaleXAnimator, scaleYAnimator);
		}
		animatorSet.setDuration(300);
		animatorSet.setInterpolator(new AccelerateInterpolator(2));
		animatorSet.addListener(new AnimatorListenerAdapter() {
			@Override
			public void onAnimationEnd(Animator animation) {
				popupContainer.removeAllViews();
			}
		});
		animatorSet.start();
	}
}
 
源代码14 项目: memory-game   文件: PopupManager.java
public static void closePopup() {
	final RelativeLayout popupContainer = (RelativeLayout) Shared.activity.findViewById(R.id.popup_container);
	int childCount = popupContainer.getChildCount();
	if (childCount > 0) {
		View background = null;
		View viewPopup = null;
		if (childCount == 1) {
			viewPopup = popupContainer.getChildAt(0);
		} else {
			background = popupContainer.getChildAt(0);
			viewPopup = popupContainer.getChildAt(1);
		}

		AnimatorSet animatorSet = new AnimatorSet();
		ObjectAnimator scaleXAnimator = ObjectAnimator.ofFloat(viewPopup, "scaleX", 0f);
		ObjectAnimator scaleYAnimator = ObjectAnimator.ofFloat(viewPopup, "scaleY", 0f);
		if (childCount > 1) {
			ObjectAnimator alphaAnimator = ObjectAnimator.ofFloat(background, "alpha", 0f);
			animatorSet.playTogether(scaleXAnimator, scaleYAnimator, alphaAnimator);
		} else {
			animatorSet.playTogether(scaleXAnimator, scaleYAnimator);
		}
		animatorSet.setDuration(300);
		animatorSet.setInterpolator(new AccelerateInterpolator(2));
		animatorSet.addListener(new AnimatorListenerAdapter() {
			@Override
			public void onAnimationEnd(Animator animation) {
				popupContainer.removeAllViews();
			}
		});
		animatorSet.start();
	}
}
 
源代码15 项目: Camera2   文件: ModeListView.java
public void startFadeoutAnimation(Animator.AnimatorListener listener,
                                  final ModeSelectorItem selectedItem,
                                  int x, int y, final int modeId)
{
    mCoverPaint.setColor(0);
    mCoverPaint.setAlpha(0);

    mCircleDrawable.setIconDrawable(
            selectedItem.getIcon().getIconDrawableClone(),
            selectedItem.getIcon().getIconDrawableSize());
    mCircleDrawable.setCenter(new Point(x, y));
    mCircleDrawable.setColor(selectedItem.getHighlightColor());
    mCircleDrawable.setAnimatorListener(new AnimatorListenerAdapter()
    {
        @Override
        public void onAnimationEnd(Animator animation)
        {
            // Post mode selection runnable to the end of the message queue
            // so that current UI changes can finish before mode initialization
            // clogs up UI thread.
            post(new Runnable()
            {
                @Override
                public void run()
                {
                    // Select the focused item.
                    selectedItem.setSelected(true);
                    onModeSelected(modeId);
                }
            });
        }
    });

    // add fade out animator to a set, so we can freely add
    // the listener without having to worry about listener dupes
    AnimatorSet s = new AnimatorSet();
    s.play(mFadeOutAlphaAnimator);
    if (listener != null)
    {
        s.addListener(listener);
    }
    mCircleDrawable.animate();
    s.start();
}
 
源代码16 项目: TelePlus-Android   文件: PasscodeView.java
private void processDone(boolean fingerprint) {
    if (!fingerprint) {
        if (SharedConfig.passcodeRetryInMs > 0) {
            return;
        }
        String password = "";
        if (SharedConfig.passcodeType == 0) {
            password = passwordEditText2.getString();
        } else if (SharedConfig.passcodeType == 1) {
            password = passwordEditText.getText().toString();
        }
        if (password.length() == 0) {
            onPasscodeError();
            return;
        }
        if (!SharedConfig.checkPasscode(password)) {
            SharedConfig.increaseBadPasscodeTries();
            if (SharedConfig.passcodeRetryInMs > 0) {
                checkRetryTextView();
            }
            passwordEditText.setText("");
            passwordEditText2.eraseAllCharacters(true);
            onPasscodeError();
            return;
        }
    }
    SharedConfig.badPasscodeTries = 0;
    passwordEditText.clearFocus();
    AndroidUtilities.hideKeyboard(passwordEditText);

    AnimatorSet AnimatorSet = new AnimatorSet();
    AnimatorSet.setDuration(200);
    AnimatorSet.playTogether(
            ObjectAnimator.ofFloat(this, "translationY", AndroidUtilities.dp(20)),
            ObjectAnimator.ofFloat(this, "alpha", AndroidUtilities.dp(0.0f)));
    AnimatorSet.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            setVisibility(View.GONE);
        }
    });
    AnimatorSet.start();

    SharedConfig.appLocked = false;
    SharedConfig.saveConfig();
    NotificationCenter.getGlobalInstance().postNotificationName(NotificationCenter.didSetPasscode);
    setOnTouchListener(null);
    if (delegate != null) {
        delegate.didAcceptedPassword();
    }
}
 
源代码17 项目: Telegram   文件: UndoView.java
public void hide(boolean apply, int animated) {
    if (getVisibility() != VISIBLE || !isShown) {
        return;
    }
    currentInfoObject = null;
    isShown = false;
    if (currentActionRunnable != null) {
        if (apply) {
            currentActionRunnable.run();
        }
        currentActionRunnable = null;
    }
    if (currentCancelRunnable != null) {
        if (!apply) {
            currentCancelRunnable.run();
        }
        currentCancelRunnable = null;
    }
    if (currentAction == ACTION_CLEAR || currentAction == ACTION_DELETE) {
        MessagesController.getInstance(currentAccount).removeDialogAction(currentDialogId, currentAction == ACTION_CLEAR, apply);
    }
    if (animated != 0) {
        AnimatorSet animatorSet = new AnimatorSet();
        if (animated == 1) {
            animatorSet.playTogether(ObjectAnimator.ofFloat(this, View.TRANSLATION_Y, (fromTop ? -1.0f : 1.0f) * (AndroidUtilities.dp(8) + undoViewHeight)));
            animatorSet.setDuration(250);
        } else {
            animatorSet.playTogether(
                    ObjectAnimator.ofFloat(this, View.SCALE_X, 0.8f),
                    ObjectAnimator.ofFloat(this, View.SCALE_Y, 0.8f),
                    ObjectAnimator.ofFloat(this, View.ALPHA, 0.0f));
            animatorSet.setDuration(180);
        }
        animatorSet.setInterpolator(new DecelerateInterpolator());
        animatorSet.addListener(new AnimatorListenerAdapter() {
            @Override
            public void onAnimationEnd(Animator animation) {
                setVisibility(INVISIBLE);
                setScaleX(1.0f);
                setScaleY(1.0f);
                setAlpha(1.0f);
            }
        });
        animatorSet.start();
    } else {
        setTranslationY((fromTop ? -1.0f : 1.0f) * (AndroidUtilities.dp(8) + undoViewHeight));
        setVisibility(INVISIBLE);
    }
}
 
源代码18 项目: fontster   文件: ViewUtils.java
public static void reveal(Activity activity, View view, View sourceView, int colorRes) {
  if (activity == null || view == null || sourceView == null) return;
  if (isLollipop()) {
    final ViewGroupOverlay groupOverlay =
        (ViewGroupOverlay) activity.getWindow().getDecorView().getOverlay();

    final Rect displayRect = new Rect();
    view.getGlobalVisibleRect(displayRect);

    // Make reveal cover the display and status bar.
    final View revealView = new View(activity);
    revealView.setTop(displayRect.top);
    revealView.setBottom(displayRect.bottom);
    revealView.setLeft(displayRect.left);
    revealView.setRight(displayRect.right);
    revealView.setBackgroundColor(ContextCompat.getColor(activity, colorRes));
    groupOverlay.add(revealView);

    final int[] clearLocation = new int[2];
    sourceView.getLocationInWindow(clearLocation);
    clearLocation[0] += sourceView.getWidth() / 2;
    clearLocation[1] += sourceView.getHeight() / 2;

    final int revealCenterX = clearLocation[0] - revealView.getLeft();
    final int revealCenterY = clearLocation[1] - revealView.getTop();

    final double x1_2 = Math.pow(revealView.getLeft() - revealCenterX, 2);
    final double x2_2 = Math.pow(revealView.getRight() - revealCenterX, 2);
    final double y_2 = Math.pow(revealView.getTop() - revealCenterY, 2);
    final float revealRadius = (float) Math.max(Math.sqrt(x1_2 + y_2), Math.sqrt(x2_2 + y_2));

    try {
      final Animator revealAnimator =
          ViewAnimationUtils.createCircularReveal(revealView,
              revealCenterX, revealCenterY, 0.0f, revealRadius);
      revealAnimator.setDuration(
          activity.getResources().getInteger(android.R.integer.config_mediumAnimTime));

      final Animator alphaAnimator = ObjectAnimator.ofFloat(revealView, View.ALPHA, 0.0f);
      alphaAnimator.setDuration(
          activity.getResources().getInteger(android.R.integer.config_shortAnimTime));
      alphaAnimator.addListener(new AnimatorListenerAdapter() {
        @Override public void onAnimationEnd(Animator animation) {
          super.onAnimationEnd(animation);
          view.startAnimation(AnimationUtils.loadAnimation(activity, R.anim.abc_fade_in));
          view.setVisibility(View.VISIBLE);
        }
      });

      final AnimatorSet animatorSet = new AnimatorSet();
      animatorSet.play(revealAnimator).before(alphaAnimator);
      animatorSet.setInterpolator(new AccelerateDecelerateInterpolator());
      animatorSet.addListener(new AnimatorListenerAdapter() {
        @Override public void onAnimationEnd(Animator animator) {
          groupOverlay.remove(revealView);
        }
      });

      animatorSet.start();
    } catch (IllegalStateException e) {
      Timber.i("View is detached - not animating");
    }
  } else {
    view.setVisibility(View.VISIBLE);
  }
}
 
源代码19 项目: InstaMaterial   文件: FeedItemAnimator.java
private void animatePhotoLike(final FeedAdapter.CellFeedViewHolder holder) {
    holder.vBgLike.setVisibility(View.VISIBLE);
    holder.ivLike.setVisibility(View.VISIBLE);

    holder.vBgLike.setScaleY(0.1f);
    holder.vBgLike.setScaleX(0.1f);
    holder.vBgLike.setAlpha(1f);
    holder.ivLike.setScaleY(0.1f);
    holder.ivLike.setScaleX(0.1f);

    AnimatorSet animatorSet = new AnimatorSet();

    ObjectAnimator bgScaleYAnim = ObjectAnimator.ofFloat(holder.vBgLike, "scaleY", 0.1f, 1f);
    bgScaleYAnim.setDuration(200);
    bgScaleYAnim.setInterpolator(DECCELERATE_INTERPOLATOR);
    ObjectAnimator bgScaleXAnim = ObjectAnimator.ofFloat(holder.vBgLike, "scaleX", 0.1f, 1f);
    bgScaleXAnim.setDuration(200);
    bgScaleXAnim.setInterpolator(DECCELERATE_INTERPOLATOR);
    ObjectAnimator bgAlphaAnim = ObjectAnimator.ofFloat(holder.vBgLike, "alpha", 1f, 0f);
    bgAlphaAnim.setDuration(200);
    bgAlphaAnim.setStartDelay(150);
    bgAlphaAnim.setInterpolator(DECCELERATE_INTERPOLATOR);

    ObjectAnimator imgScaleUpYAnim = ObjectAnimator.ofFloat(holder.ivLike, "scaleY", 0.1f, 1f);
    imgScaleUpYAnim.setDuration(300);
    imgScaleUpYAnim.setInterpolator(DECCELERATE_INTERPOLATOR);
    ObjectAnimator imgScaleUpXAnim = ObjectAnimator.ofFloat(holder.ivLike, "scaleX", 0.1f, 1f);
    imgScaleUpXAnim.setDuration(300);
    imgScaleUpXAnim.setInterpolator(DECCELERATE_INTERPOLATOR);

    ObjectAnimator imgScaleDownYAnim = ObjectAnimator.ofFloat(holder.ivLike, "scaleY", 1f, 0f);
    imgScaleDownYAnim.setDuration(300);
    imgScaleDownYAnim.setInterpolator(ACCELERATE_INTERPOLATOR);
    ObjectAnimator imgScaleDownXAnim = ObjectAnimator.ofFloat(holder.ivLike, "scaleX", 1f, 0f);
    imgScaleDownXAnim.setDuration(300);
    imgScaleDownXAnim.setInterpolator(ACCELERATE_INTERPOLATOR);

    animatorSet.playTogether(bgScaleYAnim, bgScaleXAnim, bgAlphaAnim, imgScaleUpYAnim, imgScaleUpXAnim);
    animatorSet.play(imgScaleDownYAnim).with(imgScaleDownXAnim).after(imgScaleUpYAnim);

    animatorSet.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            likeAnimationsMap.remove(holder);
            resetLikeAnimationState(holder);
            dispatchChangeFinishedIfAllAnimationsEnded(holder);
        }
    });
    animatorSet.start();

    likeAnimationsMap.put(holder, animatorSet);
}
 
@Override
public void animate() {
	final ViewGroup parentView = (ViewGroup) view.getParent();
	final FrameLayout slideOutFrame = new FrameLayout(view.getContext());
	final int positionView = parentView.indexOfChild(view);
	slideOutFrame.setLayoutParams(view.getLayoutParams());
	slideOutFrame.setClipChildren(true);
	parentView.removeView(view);
	slideOutFrame.addView(view);
	parentView.addView(slideOutFrame, positionView);

	switch (direction) {
	case DIRECTION_LEFT:
		slideAnim = ObjectAnimator.ofFloat(view, View.TRANSLATION_X,
				view.getTranslationX() - view.getWidth());
		break;
	case DIRECTION_RIGHT:
		slideAnim = ObjectAnimator.ofFloat(view, View.TRANSLATION_X,
				view.getTranslationX() + view.getWidth());
		break;
	case DIRECTION_UP:
		slideAnim = ObjectAnimator.ofFloat(view, View.TRANSLATION_Y,
				view.getTranslationY() - view.getHeight());
		break;
	case DIRECTION_DOWN:
		slideAnim = ObjectAnimator.ofFloat(view, View.TRANSLATION_Y,
				view.getTranslationY() + view.getHeight());
		break;
	default:
		break;
	}

	AnimatorSet slideSet = new AnimatorSet();
	slideSet.play(slideAnim);
	slideSet.setInterpolator(interpolator);
	slideSet.setDuration(duration);
	slideSet.addListener(new AnimatorListenerAdapter() {

		@Override
		public void onAnimationEnd(Animator animation) {
			view.setVisibility(View.INVISIBLE);
			slideAnim.reverse();
			slideOutFrame.removeAllViews();
			parentView.removeView(slideOutFrame);
			parentView.addView(view, positionView);
			if (getListener() != null) {
				getListener().onAnimationEnd(
						SlideOutUnderneathAnimation.this);
			}
		}
	});
	slideSet.start();
}