Example usage for android.support.v4.animation AnimatorCompatHelper emptyValueAnimator

List of usage examples for android.support.v4.animation AnimatorCompatHelper emptyValueAnimator

Introduction

In this page you can find the example usage for android.support.v4.animation AnimatorCompatHelper emptyValueAnimator.

Prototype

public static ValueAnimatorCompat emptyValueAnimator() 

Source Link

Usage

From source file:br.com.devmix.baseapp.listener.OnSwipeableRecyclerViewTouchListener.java

private void performDismiss(final View dismissView, final int dismissPosition) {
    // Animate the dismissed list item to zero-height and fire the dismiss callback when
    // all dismissed list item animations have completed. This triggers layout on each animation
    // frame; in the future we may want to do something smarter and more performant.

    final ViewGroup.LayoutParams lp = dismissView.getLayoutParams();
    final int originalLayoutParamsHeight = lp.height;
    final int originalHeight = dismissView.getHeight();

    ValueAnimatorCompat animatorCompat = AnimatorCompatHelper.emptyValueAnimator();
    animatorCompat.setDuration(mAnimationTime);
    animatorCompat.addListener(new AnimatorListenerCompat() {
        @Override/*from w w  w.ja  v  a  2s .c o m*/
        public void onAnimationStart(ValueAnimatorCompat animation) {
        }

        @Override
        public void onAnimationEnd(ValueAnimatorCompat animation) {
            --mDismissAnimationRefCount;
            if (mDismissAnimationRefCount == 0) {
                // No active animations, process all pending dismisses.
                // Sort by descending position
                Collections.sort(mPendingDismisses);

                int[] dismissPositions = new int[mPendingDismisses.size()];
                for (int i = mPendingDismisses.size() - 1; i >= 0; i--) {
                    dismissPositions[i] = mPendingDismisses.get(i).position;
                }

                if (mFinalDelta > 0) {
                    mSwipeListener.onDismissedBySwipeRight(mRecyclerView, dismissPositions);
                } else {
                    mSwipeListener.onDismissedBySwipeLeft(mRecyclerView, dismissPositions);
                }

                // Reset mDownPosition to avoid MotionEvent.ACTION_UP trying to start a dismiss
                // animation with a stale position
                mDownPosition = ListView.INVALID_POSITION;

                ViewGroup.LayoutParams lp;
                for (PendingDismissData pendingDismiss : mPendingDismisses) {
                    // Reset view presentation
                    ViewCompat.setAlpha(pendingDismiss.view, mAlpha);
                    ViewCompat.setTranslationX(pendingDismiss.view, 0);

                    lp = pendingDismiss.view.getLayoutParams();
                    lp.height = originalLayoutParamsHeight;

                    pendingDismiss.view.setLayoutParams(lp);
                }

                // Send a cancel event
                long time = SystemClock.uptimeMillis();
                MotionEvent cancelEvent = MotionEvent.obtain(time, time, MotionEvent.ACTION_CANCEL, 0, 0, 0);
                mRecyclerView.dispatchTouchEvent(cancelEvent);

                mPendingDismisses.clear();
                mAnimatingPosition = ListView.INVALID_POSITION;
            }
        }

        @Override
        public void onAnimationCancel(ValueAnimatorCompat animation) {
        }

        @Override
        public void onAnimationRepeat(ValueAnimatorCompat animation) {
        }
    });
    animatorCompat.addUpdateListener(new AnimatorUpdateListenerCompat() {
        @Override
        public void onAnimationUpdate(ValueAnimatorCompat animation) {
            float fraction = animation.getAnimatedFraction();
            lp.height = (int) (originalHeight * (1 - fraction));
            dismissView.setLayoutParams(lp);
        }
    });

    mPendingDismisses.add(new PendingDismissData(dismissPosition, dismissView));
    animatorCompat.start();
}

From source file:org.addhen.smssync.presentation.view.ui.listener.OnSwipeableRecyclerViewTouchListener.java

private void performDismiss(final View dismissView, final int dismissPosition) {
    // Animate the dismissed list item to zero-height and fire the dismiss callback when
    // all dismissed list item animations have completed. This triggers layout on each animation
    // frame; in the future we may want to do something smarter and more performant.

    final ViewGroup.LayoutParams lp = dismissView.getLayoutParams();
    final int originalLayoutParamsHeight = lp.height;
    final int originalHeight = dismissView.getHeight();

    ValueAnimatorCompat animatorCompat = AnimatorCompatHelper.emptyValueAnimator();
    animatorCompat.setDuration(mAnimationTime);
    animatorCompat.addListener(new AnimatorListenerCompat() {
        @Override//from   w  ww  .  j a  v  a  2s.c  om
        public void onAnimationStart(ValueAnimatorCompat animation) {
        }

        @Override
        public void onAnimationEnd(ValueAnimatorCompat animation) {
            --mDismissAnimationRefCount;
            if (mDismissAnimationRefCount == 0) {
                // No active animations, process all pending dismisses.
                // Sort by descending position
                Collections.sort(mPendingDismisses);

                int[] dismissPositions = new int[mPendingDismisses.size()];
                for (int i = mPendingDismisses.size() - 1; i >= 0; i--) {
                    dismissPositions[i] = mPendingDismisses.get(i).position;
                }

                if (mFinalDelta > 0) {
                    mSwipeListener.onDismissedBySwipeRight(mRecyclerView, dismissPositions);
                } else {
                    mSwipeListener.onDismissedBySwipeLeft(mRecyclerView, dismissPositions);
                }

                // Reset mDownPosition to avoid MotionEvent.ACTION_UP trying to start a dismiss
                // animation with a stale position
                mDownPosition = ListView.INVALID_POSITION;

                ViewGroup.LayoutParams lp;
                for (PendingDismissData pendingDismiss : mPendingDismisses) {
                    // Reset view presentation
                    ViewCompat.setAlpha(pendingDismiss.view, mAlpha);
                    ViewCompat.setTranslationX(pendingDismiss.view, 0);

                    lp = pendingDismiss.view.getLayoutParams();
                    lp.height = originalLayoutParamsHeight;

                    pendingDismiss.view.setLayoutParams(lp);
                }

                // Send a cancel event
                long time = SystemClock.uptimeMillis();
                MotionEvent cancelEvent = MotionEvent.obtain(time, time, MotionEvent.ACTION_CANCEL, 0, 0, 0);
                mRecyclerView.dispatchTouchEvent(cancelEvent);

                mPendingDismisses.clear();
                mAnimatingPosition = ListView.INVALID_POSITION;
            }
        }

        @Override
        public void onAnimationCancel(ValueAnimatorCompat animation) {
        }

        @Override
        public void onAnimationRepeat(ValueAnimatorCompat animation) {
        }
    });
    animatorCompat.addUpdateListener(animation -> {
        float fraction = animation.getAnimatedFraction();
        lp.height = (int) (originalHeight * (1 - fraction));
        dismissView.setLayoutParams(lp);
    });

    mPendingDismisses.add(new PendingDismissData(dismissPosition, dismissView));
    animatorCompat.start();
}

From source file:com.goka.flickableview.ImageViewTouchBase.java

protected void scrollBy(final float distanceX, final float distanceY, final long durationMs) {
    ValueAnimatorCompat animatorCompat = AnimatorCompatHelper.emptyValueAnimator();
    animatorCompat.setDuration(durationMs);

    stopAllAnimations();//from  w  w  w  . j  a  va  2 s . c om

    mCurrentAnimation = animatorCompat;
    mCurrentAnimation.start();

    final Interpolator interpolator = new DecelerateInterpolator();
    animatorCompat.addUpdateListener(new AnimatorUpdateListenerCompat() {
        float oldValueX = 0;

        float oldValueY = 0;

        @Override
        public void onAnimationUpdate(ValueAnimatorCompat animation) {
            float fraction = interpolator.getInterpolation(animation.getAnimatedFraction());
            float valueX = fraction * distanceX;
            float valueY = fraction * distanceY;
            panBy(valueX - oldValueX, valueY - oldValueY);

            oldValueX = valueX;
            oldValueY = valueY;
        }
    });

    mCurrentAnimation.addListener(new AnimatorListenerCompat() {
        @Override
        public void onAnimationStart(ValueAnimatorCompat animation) {

        }

        @Override
        public void onAnimationEnd(ValueAnimatorCompat animation) {
            RectF centerRect = getCenter(mSuppMatrix, true, true);
            if (centerRect.left != 0 || centerRect.top != 0) {
                scrollBy(centerRect.left, centerRect.top);
            }
        }

        @Override
        public void onAnimationCancel(ValueAnimatorCompat animation) {

        }

        @Override
        public void onAnimationRepeat(ValueAnimatorCompat animation) {

        }
    });

}

From source file:com.goka.flickableview.ImageViewTouchBase.java

protected void zoomTo(float scale, float centerX, float centerY, final long durationMs) {
    if (scale > getMaxScale()) {
        scale = getMaxScale();//w w  w  . j av  a2s .  c o  m
    }

    final float oldScale = getScale();

    Matrix m = new Matrix(mSuppMatrix);
    m.postScale(scale, scale, centerX, centerY);
    RectF rect = getCenter(m, true, true);

    final float finalScale = scale;
    final float destX = centerX + rect.left * scale;
    final float destY = centerY + rect.top * scale;

    stopAllAnimations();

    ValueAnimatorCompat animatorCompat = AnimatorCompatHelper.emptyValueAnimator();
    animatorCompat.setDuration(durationMs);
    final Interpolator interpolator = new DecelerateInterpolator(1.0f);
    animatorCompat.addUpdateListener(new AnimatorUpdateListenerCompat() {
        @Override
        public void onAnimationUpdate(ValueAnimatorCompat animation) {
            float fraction = interpolator.getInterpolation(animation.getAnimatedFraction());
            float value = oldScale + (fraction * (finalScale - oldScale));
            zoomTo(value, destX, destY);
        }
    });
    animatorCompat.start();
}