@Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { float globalPositionOffsetPixels = position * (dotsStrokeSize + dotsSpacing * 2) + (dotsStrokeSize + dotsSpacing * 2) * positionOffset; float indicatorTranslationX = globalPositionOffsetPixels + horizontalMargin + dotsStrokeWidth - dotIndicatorAdditionalSize / 2f; dotIndicatorSpring.getSpring().setFinalPosition(indicatorTranslationX); dotIndicatorSpring.animateToFinalPosition(indicatorTranslationX); }
/** * Start fling animation(X coordinate) * * @param velocityX velocity X coordinate */ private void startFlingAnimationX(float velocityX) { final FlingAnimation flingAnimationX = new FlingAnimation(new FloatValueHolder()); flingAnimationX.setStartVelocity(velocityX); flingAnimationX.setMaxValue(mPositionLimitRect.right); flingAnimationX.setMinValue(mPositionLimitRect.left); flingAnimationX.setStartValue(mParams.x); flingAnimationX.setFriction(ANIMATION_FLING_X_FRICTION); flingAnimationX.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_PIXELS); flingAnimationX.addUpdateListener(new DynamicAnimation.OnAnimationUpdateListener() { @Override public void onAnimationUpdate(DynamicAnimation animation, float value, float velocity) { final int x = Math.round(value); // Not moving, or the touch operation is continuing if (mParams.x == x || mVelocityTracker != null) { return; } // update y coordinate mParams.x = x; updateViewLayout(); } }); flingAnimationX.start(); }
final SpringForce springY = new SpringForce(currentY < mMetrics.heightPixels / 2 ? mPositionLimitRect.top : mPositionLimitRect.bottom); springY.setDampingRatio(SpringForce.DAMPING_RATIO_LOW_BOUNCY); springY.setStiffness(SpringForce.STIFFNESS_LOW); final SpringAnimation springAnimationY = new SpringAnimation(new FloatValueHolder()); springAnimationY.setStartVelocity(velocityY); springAnimationY.setStartValue(mParams.y); springAnimationY.setSpring(springY); springAnimationY.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_PIXELS); springAnimationY.addUpdateListener(new DynamicAnimation.OnAnimationUpdateListener() { @Override public void onAnimationUpdate(DynamicAnimation animation, float value, float velocity) { springAnimationY.start();
private void setUpDotIndicator() { if (viewPager != null && viewPager.getAdapter() != null && viewPager.getAdapter().getCount() == 0) { return; } if (dotIndicatorView != null && indexOfChild(dotIndicatorView) != -1) { removeView(dotIndicatorView); } dotIndicatorView = buildDot(false); addView(dotIndicatorView); dotIndicatorSpring = new SpringAnimation(dotIndicatorView, SpringAnimation.TRANSLATION_X); SpringForce springForce = new SpringForce(0); springForce.setDampingRatio(dampingRatio); springForce.setStiffness(stiffness); dotIndicatorSpring.setSpring(springForce); }
@Override public void onClick(View view) { final SpringAnimation springAnimation = new SpringAnimation(img, DynamicAnimation.X); final SpringForce springForce = new SpringForce(); springForce.setDampingRatio(SpringForce.DAMPING_RATIO_HIGH_BOUNCY); springForce.setStiffness(SpringForce.STIFFNESS_VERY_LOW); springForce.setFinalPosition(img.getX()); springAnimation.setSpring(springForce); springAnimation.setStartVelocity(2000); springAnimation.start(); } });
@Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { int stepX = dotsSize + dotsSpacing * 2; float xFinalPosition; float widthFinalPosition; if (positionOffset >= 0 && positionOffset < 0.1f) { xFinalPosition = horizontalMargin + position * stepX; widthFinalPosition = dotsSize; } else if (positionOffset >= 0.1f && positionOffset <= 0.9f) { xFinalPosition = horizontalMargin + position * stepX; widthFinalPosition = dotsSize + stepX; } else { xFinalPosition = horizontalMargin + (position + 1) * stepX; widthFinalPosition = dotsSize; } if (dotIndicatorXSpring.getSpring().getFinalPosition() != xFinalPosition) { dotIndicatorXSpring.getSpring().setFinalPosition(xFinalPosition); } if (dotIndicatorWidthSpring.getSpring().getFinalPosition() != widthFinalPosition) { dotIndicatorWidthSpring.getSpring().setFinalPosition(widthFinalPosition); } if (!dotIndicatorXSpring.isRunning()) { dotIndicatorXSpring.start(); } if (!dotIndicatorWidthSpring.isRunning()) { dotIndicatorWidthSpring.start(); } }
@Override public void onClick(View view) { final FlingAnimation flingAnimation = new FlingAnimation(img, DynamicAnimation.X); flingAnimation.setStartVelocity(500f); flingAnimation.setFriction(0.5f); flingAnimation.start(); } });
@Override public void fling(float velocity) { cancel(); isFlinging = true; fling.addUpdateListener(updateListener); fling.addEndListener(endListener); fling.setStartVelocity(velocity).start(); }
public void onClick(View v) { anim.cancel(); anim.setStartValue(-700); anim.start(); } });
private void cancel() { isFlinging = false; animator.cancel(); spring.cancel(); fling.cancel(); fling.removeUpdateListener(updateListener); fling.removeEndListener(endListener); } }
@Override public void onAnimationUpdate(DynamicAnimation dynamicAnimation, float value, float velocity) { animate2X.animateToFinalPosition(value); } });
final SpringForce springX = new SpringForce(goalPositionX); springX.setDampingRatio(ANIMATION_SPRING_X_DAMPING_RATIO); springX.setStiffness(ANIMATION_SPRING_X_STIFFNESS); final SpringAnimation springAnimationX = new SpringAnimation(new FloatValueHolder()); springAnimationX.setStartVelocity(mVelocityTracker.getXVelocity()); springAnimationX.setStartValue(mParams.x); springAnimationX.setSpring(springX); springAnimationX.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_PIXELS); springAnimationX.addUpdateListener(new DynamicAnimation.OnAnimationUpdateListener() { @Override public void onAnimationUpdate(DynamicAnimation animation, float value, float velocity) { springAnimationX.start();
dotIndicatorView = dotIndicatorLayout.findViewById(R.id.worm_dot); addView(dotIndicatorLayout); dotIndicatorXSpring = new SpringAnimation(dotIndicatorLayout, SpringAnimation.TRANSLATION_X); SpringForce springForceX = new SpringForce(0); springForceX.setDampingRatio(1f); springForceX.setStiffness(300); dotIndicatorXSpring.setSpring(springForceX); dotIndicatorWidthSpring = new SpringAnimation(dotIndicatorLayout, floatPropertyCompat); SpringForce springForceWidth = new SpringForce(0); springForceWidth.setDampingRatio(1f); springForceWidth.setStiffness(300); dotIndicatorWidthSpring.setSpring(springForceWidth);
/** * Start fling animation(Y coordinate) * * @param velocityY velocity Y coordinate */ private void startFlingAnimationY(float velocityY) { final FlingAnimation flingAnimationY = new FlingAnimation(new FloatValueHolder()); flingAnimationY.setStartVelocity(velocityY); flingAnimationY.setMaxValue(mPositionLimitRect.bottom); flingAnimationY.setMinValue(mPositionLimitRect.top); flingAnimationY.setStartValue(mParams.y); flingAnimationY.setFriction(ANIMATION_FLING_Y_FRICTION); flingAnimationY.setMinimumVisibleChange(DynamicAnimation.MIN_VISIBLE_CHANGE_PIXELS); flingAnimationY.addUpdateListener(new DynamicAnimation.OnAnimationUpdateListener() { @Override public void onAnimationUpdate(DynamicAnimation animation, float value, float velocity) { final int y = Math.round(value); // Not moving, or the touch operation is continuing if (mParams.y == y || mVelocityTracker != null) { return; } // update y coordinate mParams.y = y; updateViewLayout(); } }); flingAnimationY.start(); }
@Override public void fling(float velocity) { isFlinging = true; cancel(); fling.addUpdateListener(updateListener); fling.addEndListener(endListener); fling.setStartVelocity(velocity).start(); }
private void cancel() { animator.cancel(); spring.cancel(); fling.cancel(); fling.removeUpdateListener(updateListener); fling.removeEndListener(endListener); isFlinging = false; } }
@Override public void onAnimationUpdate(DynamicAnimation dynamicAnimation, float value, float velocity) { animate2Y.animateToFinalPosition(value); } });
public static SpringAnimation createSpringAnimation(View view, DynamicAnimation.ViewProperty property, float finalPosition, float stiffness, float dampingRatio) { SpringAnimation animation = new SpringAnimation(view, property); SpringForce springForce = new SpringForce(finalPosition); springForce.setStiffness(stiffness); springForce.setDampingRatio(dampingRatio); animation.setSpring(springForce); return animation; }
@Override public void onAnimationUpdate(DynamicAnimation animation, float value, float velocity) { animSecondFollowerX.animateToFinalPosition(value); } });
@Override public void onAnimationUpdate(DynamicAnimation animation, float value, float velocity) { animSecondFollowerY.animateToFinalPosition(value); } });