private Animator createAnimator( final View view, float startTranslationY, float endTranslationY) { view.setTranslationY(startTranslationY); final List<Boolean> ancestralClipping = TransitionUtils.setAncestralClipping(view, false); Animator transition = ObjectAnimator.ofFloat(view, View.TRANSLATION_Y, endTranslationY); transition.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { TransitionUtils.restoreAncestralClipping(view, ancestralClipping); } }); return transition; } }
/** * Associates the given Animation with the provided drawable state specs so that it will be run * when the View's drawable state matches the specs. * * @param specs drawable state specs to match against * @param animation The Animation to run when the specs match */ public void addState(int[] specs, Animator animation, Animator.AnimatorListener listener) { Tuple tuple = new Tuple(specs, animation, listener); animation.addListener(mAnimationListener); mTuples.add(tuple); }
@Override public void dismiss() { container.animateVisibility(View.INVISIBLE).addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { DialogBase.super.dismiss(); } }); }
private void toggle() { if (animator != null) { animator.cancel(); } animator = ObjectAnimator.ofFloat(this, PROGRESS, isPlay ? 1.0F : 0.0F, isPlay ? 0.0F : 1.0F); animator.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { isPlay = !isPlay; } }); animator.setInterpolator(new DecelerateInterpolator()); animator.setDuration(200); animator.start(); }
@Override public void dismiss() { FrameLayout content = getContentView().findViewById(R.id.carbon_popupContainer); content.animateVisibility(View.INVISIBLE).addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { DropDownMenu.super.dismiss(); } }); }
@Override public void dismiss() { carbon.widget.FrameLayout content = getContentView().findViewById(R.id.carbon_popupContainer); content.animateVisibility(android.view.View.INVISIBLE).addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { PopupMenu.super.dismiss(); } }); }
private void addLeaf(float progress, RectF leafFlyRect) { if (progress < mNextLeafCreateThreshold) { return; } mNextLeafCreateThreshold += LEAF_CREATE_DURATION_INTERVAL; LeafHolder leafHolder = new LeafHolder(); mLeafHolders.add(leafHolder); Animator leafAnimator = getAnimator(leafHolder, leafFlyRect, progress); leafAnimator.addListener(new AnimEndListener(leafHolder)); leafAnimator.start(); }
@Override public void addListener(AnimatorListener listener) { AnimatorListener wrapper = new AnimatorListenerWrapper(this, listener); if (!mListeners.containsKey(listener)) { mListeners.put(listener, wrapper); mAnimator.addListener(wrapper); } }
@Override public void dismiss() { LinearLayout content = getContentView().findViewById(R.id.carbon_menuContainer); content.setVisibility(View.INVISIBLE); content.getAnimator().addListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { EditTextMenu.super.dismiss(); } }); }
private void animateAddToPocket(final StoryViewHolder holder) { endAnimation(holder); Animator addToPocketAnim = holder.createAddToPocketAnimator(); addToPocketAnim.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationStart(Animator animation) { dispatchChangeStarting(holder, false); } @Override public void onAnimationEnd(Animator animation) { runningAddToPocket = null; dispatchChangeFinished(holder, false); } @Override public void onAnimationCancel(Animator animation) { runningAddToPocket = null; dispatchChangeFinished(holder, false); } }); runningAddToPocket = Pair.create(holder, addToPocketAnim); addToPocketAnim.start(); }
@Override public void addListener(AnimatorListener listener) { AnimatorListener wrapper = new AnimatorListenerWrapper(this, listener); if (!mListeners.containsKey(listener)) { mListeners.put(listener, wrapper); mAnimator.addListener(wrapper); } }
@Override public void addListener(AnimatorListener listener) { AnimatorListener wrapper = new AnimatorListenerWrapper(this, listener); if (!mListeners.containsKey(listener)) { mListeners.put(listener, wrapper); mAnimator.addListener(wrapper); } }
@Override public void addListener(AnimatorListener listener) { AnimatorListener wrapper = new AnimatorListenerWrapper(this, listener); if (!mListeners.containsKey(listener)) { mListeners.put(listener, wrapper); mAnimator.addListener(wrapper); } }
@Test public void normal() { Animator animator = ViewAnimationUtils.createCircularReveal(view, 10, 10, 10f, 100f); animator.addListener(listener); animator.start(); assertThat(listener.startCount).isEqualTo(1); assertThat(listener.endCount).isEqualTo(1); }
@Test public void delayed() { Animator animator = ViewAnimationUtils.createCircularReveal(view, 10, 10, 10f, 100f); animator.setStartDelay(1000); animator.addListener(listener); animator.start(); assertThat(listener.startCount).isEqualTo(1); assertThat(listener.endCount).isEqualTo(1); }
@Test public void canceled() { Animator animator = ViewAnimationUtils.createCircularReveal(view, 10, 10, 10f, 100f); animator.addListener(listener); Robolectric.getForegroundThreadScheduler().pause(); animator.start(); animator.cancel(); assertThat(listener.startCount).isEqualTo(1); assertThat(listener.cancelCount).isEqualTo(1); assertThat(listener.endCount).isEqualTo(1); }
@Test public void neverStartedEnded() { Animator animator = ViewAnimationUtils.createCircularReveal(view, 10, 10, 10f, 100f); animator.addListener(listener); animator.end(); // This behavior changed between L and L MR1. In older versions, onAnimationEnd would always be // called without any guarantee that onAnimationStart had been called first. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { assertThat(listener.startCount).isEqualTo(1); assertThat(listener.endCount).isEqualTo(1); } else { assertThat(listener.startCount).isEqualTo(0); assertThat(listener.endCount).isEqualTo(1); } }
@Test public void doubleCanceled() { Animator animator = ViewAnimationUtils.createCircularReveal(view, 10, 10, 10f, 100f); animator.addListener(listener); Robolectric.getForegroundThreadScheduler().pause(); animator.start(); animator.cancel(); animator.cancel(); assertThat(listener.startCount).isEqualTo(1); assertThat(listener.cancelCount).isEqualTo(1); assertThat(listener.endCount).isEqualTo(1); }
@Test public void neverStartedCanceled() { Animator animator = ViewAnimationUtils.createCircularReveal(view, 10, 10, 10f, 100f); animator.addListener(listener); animator.cancel(); assertThat(listener.startCount).isEqualTo(0); // This behavior changed between L and L MR1. In older versions, onAnimationCancel and // onAnimationEnd would always be called regardless of whether the animation was started. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { assertThat(listener.cancelCount).isEqualTo(0); assertThat(listener.endCount).isEqualTo(0); } else { assertThat(listener.cancelCount).isEqualTo(1); assertThat(listener.endCount).isEqualTo(1); } }
@Test public void doubleEnded() { Animator animator = ViewAnimationUtils.createCircularReveal(view, 10, 10, 10f, 100f); animator.addListener(listener); Robolectric.getForegroundThreadScheduler().pause(); animator.start(); animator.end(); animator.end(); assertThat(listener.startCount).isEqualTo(1); assertThat(listener.endCount).isEqualTo(1); }