private void animateStaticImageVisibility(boolean visible) { // If the panel is expanded then #onUpdateFromPeekToExpand() is responsible for setting // mStaticImageVisibility and the static image appearance should not be animated. if (visible && mExpandedPercentage > 0.f) return; if (mStaticImageVisibilityInterpolator == null) { mStaticImageVisibilityInterpolator = PathInterpolatorCompat.create(0.4f, 0.f, 0.6f, 1.f); } mOverlayPanelAnimation.cancelAnimation(this, AnimationType.STATIC_IMAGE_VISIBILITY); float endValue = visible ? 1.f : 0.f; mOverlayPanelAnimation.addToAnimation(this, AnimationType.STATIC_IMAGE_VISIBILITY, mStaticImageVisibilityPercentage, endValue, OverlayPanelAnimation.BASE_ANIMATION_DURATION_MS, 0, false, mStaticImageVisibilityInterpolator); }
private void animateCustomImageVisibility(boolean visible) { // If the panel is expanded then #onUpdateFromPeekToExpand() is responsible for setting // mCustomImageVisibility and the custom image appearance should not be animated. if (visible && mExpandedPercentage > 0.f) return; if (mCustomImageVisibilityInterpolator == null) { mCustomImageVisibilityInterpolator = PathInterpolatorCompat.create(0.4f, 0.f, 0.6f, 1.f); } mOverlayPanelAnimation.cancelAnimation(this, AnimationType.CUSTOM_IMAGE_VISIBILITY); float endValue = visible ? 1.f : 0.f; mOverlayPanelAnimation.addToAnimation(this, AnimationType.CUSTOM_IMAGE_VISIBILITY, mCustomImageVisibilityPercentage, endValue, OverlayPanelAnimation.BASE_ANIMATION_DURATION_MS, 0, false, mCustomImageVisibilityInterpolator); }
private static @Nullable Interpolator createTimeInterpolator(@NonNull WXAnimationBean animation) { String interpolator = animation.timingFunction; if (!TextUtils.isEmpty(interpolator)) { switch (interpolator) { case WXAnimationBean.EASE_IN: return new AccelerateInterpolator(); case WXAnimationBean.EASE_OUT: return new DecelerateInterpolator(); case WXAnimationBean.EASE_IN_OUT: return new AccelerateDecelerateInterpolator(); case WXAnimationBean.LINEAR: return new LinearInterpolator(); default: //Parse cubic-bezier try { SingleFunctionParser<Float> parser = new SingleFunctionParser<>( animation.timingFunction, new SingleFunctionParser.FlatMapper<Float>() { @Override public Float map(String raw) { return Float.parseFloat(raw); } }); List<Float> params = parser.parse(WXAnimationBean.CUBIC_BEZIER); if (params != null && params.size() == WXAnimationBean.NUM_CUBIC_PARAM) { return PathInterpolatorCompat.create( params.get(0), params.get(1), params.get(2), params.get(3)); } else { return null; } }catch (RuntimeException e){ return null; } } } return null; }
private @Nullable Interpolator createTimeInterpolator() { String interpolator = mAnimationBean.timingFunction; if (!TextUtils.isEmpty(interpolator)) { switch (interpolator) { case WXAnimationBean.EASE_IN: return new AccelerateInterpolator(); case WXAnimationBean.EASE_OUT: return new DecelerateInterpolator(); case WXAnimationBean.EASE_IN_OUT: return new AccelerateDecelerateInterpolator(); case WXAnimationBean.LINEAR: return new LinearInterpolator(); default: //Parse cubic-bezier try { SingleFunctionParser<Float> parser = new SingleFunctionParser<>( mAnimationBean.timingFunction, new SingleFunctionParser.FlatMapper<Float>() { @Override public Float map(String raw) { return Float.parseFloat(raw); } }); List<Float> params = parser.parse(WXAnimationBean.CUBIC_BEZIER); if (params != null && params.size() == WXAnimationBean.NUM_CUBIC_PARAM) { return PathInterpolatorCompat.create( params.get(0), params.get(1), params.get(2), params.get(3)); } else { return null; } } catch (RuntimeException e) { return null; } } } return null; }
private ValueAnimator initAnimatior(final ProgressBean pb) { Interpolator pathInterpolatorCompat = PathInterpolatorCompat.create(0.7f, 0f, 0.3f, 1f); ValueAnimator mAnimator = ValueAnimator.ofInt(0, 359); mAnimator.setDuration(pb.getDuration()); mAnimator.setInterpolator(pathInterpolatorCompat); mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { Log.d("dur", animation.getAnimatedValue() + "====" + pb.getmBallRadius()); pb.setmCurrentAngle((int) animation.getAnimatedValue()); invalidate(); } }); return mAnimator; }
private void initAnimatior() { pathInterpolatorCompat = PathInterpolatorCompat.create(0.7f, 0f, 0.3f, 1f); mAnimator = ValueAnimator.ofInt(0, 359); mAnimator.setDuration(mDuration); mAnimator.setRepeatCount(-1); mAnimator.setInterpolator(pathInterpolatorCompat); mAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { mCurrentAngle = (int) animation.getAnimatedValue(); invalidate(); } }); }
@Override public void onScroll(int height, int scrollArea, float scrollPosition) { final Interpolator interpolator = PathInterpolatorCompat.create(.19f,0f,.2f,1f); final float interpolation = interpolator.getInterpolation((scrollPosition * .30f)); final int bottomPadding = (int) (-1f * interpolation * scrollArea); findViewById(R.id.activity_input).setTranslationY(bottomPadding); findViewById(R.id.activity_recyclerview).setTranslationY(bottomPadding); }
/** * Hide the fab and blocking the ability to place a flag. */ private void hidePlaceFlag() { mPlaceFlagButton .animate() .translationY(mPlaceFlagButton.getHeight() + mPlaceFlagButtonMarginBottom) .setDuration(150) .setInterpolator(PathInterpolatorCompat.create(0.4f, 0.0f, 0.6f, 1f)) .start(); mCannotCaptureTextView.setVisibility(View.INVISIBLE); mFlagButtonIsShown = false; }
@Override public void onUserTouchMove(MotionEvent motionEvent) { float distance = Math.max( Math.abs(motionEvent.getRawX() - originalX), Math.abs(motionEvent.getRawY() - originalY) ); unlockOnUp = distance > unlockDistance; if (unlockOnUp && !hasVibrated) { SRJHelper.vibrate(20, mContext); hasVibrated = true; } float scale = distance/(mContext.getResources().getDimensionPixelSize(R.dimen.lockscreen_ac_display_unlock_distance_max)); final float MAX_ALPHA = 0.6f; dimView.animate().alpha(scale/ MAX_ALPHA).setDuration(0).start(); Interpolator customInterpolator = PathInterpolatorCompat.create(0.080f, 1.80f, 0.590f, 1.70f); scale = customInterpolator.getInterpolation(scale); scaleAnimator = unlockView.animate().scaleX(scale).scaleY(scale).setDuration(0); scaleAnimator.start(); float imgLockScale = scale/2; if (imgLockScale > 0.35f) { imgLockScale = 0.35f; } imgLock.animate().alpha(scale).scaleX(imgLockScale).scaleY(imgLockScale).setDuration(0).start(); }
private void initTangentInterpolator() { if (mCircleRadius > 0 && (mDragHeight >= mCircleRadius * 2)) { // The run // 270~360~mTangentAngle=>0~90~mTangentAngle // When drag double radius the angle = MIN_RUN_ANGLE mTangentInterpolator = PathInterpolatorCompat.create((mCircleRadius * 2) / mDragHeight, MIN_RUN_ANGLE / (MIN_RUN_ANGLE + mTangentAngle)); } }
public void doScroll(String direction) { Interpolator customInterpolator = PathInterpolatorCompat.create(0.445f, 0.050f, 0.550f, 0.950f); if (direction.equals("up")) { mRecyclerView.smoothScrollBy(0,(int) (-FullscreenActivity.scrollDistance * mRecyclerView.getHeight()),customInterpolator); } else { mRecyclerView.smoothScrollBy(0,(int) (+FullscreenActivity.scrollDistance * mRecyclerView.getHeight()),customInterpolator); } }
@Override protected void onStartRefreshAnimation() { if(mFlyAnimator != null){ mFlyAnimator.end(); } final View iconView = getActionView(); UIUtils.clearAnimator(iconView); AnimatorSet flyUpAnim = new AnimatorSet(); flyUpAnim.setDuration(800); ObjectAnimator transX = ObjectAnimator.ofFloat(iconView, "translationX", 0, getWidth()); ObjectAnimator transY = ObjectAnimator.ofFloat(iconView, "translationY", 0, -mHeaderController.getHeight()); transY.setInterpolator(PathInterpolatorCompat.create(0.7f, 1f)); ObjectAnimator rotation = ObjectAnimator.ofFloat(iconView, "rotation", -45, 0); rotation.setInterpolator(new DecelerateInterpolator()); ObjectAnimator rotationX = ObjectAnimator.ofFloat(iconView, "rotationX", 0, 60); rotationX.setInterpolator(new DecelerateInterpolator()); flyUpAnim.playTogether(transX, transY, rotationX, ObjectAnimator.ofFloat(iconView, "scaleX", 1, 0.5f), ObjectAnimator.ofFloat(iconView, "scaleY", 1, 0.5f), rotation ); mFlyAnimator = flyUpAnim; mFlyAnimator.start(); if (mListener != null) { mListener.onRefresh(FlyRefreshLayout.this); } }
@Override public void startRefresh() { if (mFlyAnimator != null) { mFlyAnimator.end(); } final View iconView = getIconView(); UIUtils.clearAnimator(iconView); AnimatorSet flyUpAnim = new AnimatorSet(); flyUpAnim.setDuration(800); ObjectAnimator transX = ObjectAnimator.ofFloat(iconView, "translationX", 0, getWidth()); ObjectAnimator transY = ObjectAnimator.ofFloat(iconView, "translationY", 0, -mHeaderController.getHeight()); transY.setInterpolator(PathInterpolatorCompat.create(0.7f, 1f)); ObjectAnimator rotation = ObjectAnimator.ofFloat(iconView, "rotation", -45, 0); rotation.setInterpolator(new DecelerateInterpolator()); ObjectAnimator rotationX = ObjectAnimator.ofFloat(iconView, "rotationX", 0, 60); rotationX.setInterpolator(new DecelerateInterpolator()); flyUpAnim.playTogether(transX, transY, rotationX, ObjectAnimator.ofFloat(iconView, "scaleX", 1, 0.5f), ObjectAnimator.ofFloat(iconView, "scaleY", 1, 0.5f), rotation ); mFlyAnimator = flyUpAnim; mFlyAnimator.start(); if (mListener != null) { mListener.onRefresh(FlyRefreshLayout.this); } }
/** * 构造PathInterpolator * @param segmentLength * @return */ public Interpolator createInterpolator(float[] segmentLength){ Path p = createPath(segmentLength); Interpolator inter = PathInterpolatorCompat.create(p); return inter; }
static <T> Keyframe<T> newInstance(JSONObject json, LottieComposition composition, float scale, AnimatableValue.Factory<T> valueFactory) { PointF cp1 = null; PointF cp2 = null; float startFrame = 0; T startValue = null; T endValue = null; Interpolator interpolator = null; if (json.has("t")) { startFrame = (float) json.optDouble("t", 0); Object startValueJson = json.opt("s"); if (startValueJson != null) { startValue = valueFactory.valueFromObject(startValueJson, scale); } Object endValueJson = json.opt("e"); if (endValueJson != null) { endValue = valueFactory.valueFromObject(endValueJson, scale); } JSONObject cp1Json = json.optJSONObject("o"); JSONObject cp2Json = json.optJSONObject("i"); if (cp1Json != null && cp2Json != null) { cp1 = JsonUtils.pointFromJsonObject(cp1Json, scale); cp2 = JsonUtils.pointFromJsonObject(cp2Json, scale); } boolean hold = json.optInt("h", 0) == 1; if (hold) { endValue = startValue; // TODO: create a HoldInterpolator so progress changes don't invalidate. interpolator = LINEAR_INTERPOLATOR; } else if (cp1 != null) { interpolator = PathInterpolatorCompat.create( cp1.x / scale, cp1.y / scale, cp2.x / scale, cp2.y / scale); } else { interpolator = LINEAR_INTERPOLATOR; } } else { startValue = valueFactory.valueFromObject(json, scale); endValue = startValue; } return new Keyframe<>(composition, startValue, endValue, interpolator, startFrame, null); }
@Override public void onStartAnimator(RefreshLayout layout, int headHeight, int extendHeight) { /** * 提前关闭 下拉视图偏移 */ mRefreshKernel.animSpinner(0); if (mCurrentPercent > 0) { ValueAnimator valueAnimator = ValueAnimator.ofFloat(mCurrentPercent, 0); valueAnimator.setDuration(300); valueAnimator.addUpdateListener(animation -> { onPullingDown((float) animation.getAnimatedValue(), 0, 0, 0); }); valueAnimator.start(); mCurrentPercent = 0; } if (mFlyView != null && !mIsRefreshing) { if (mFlyAnimator != null) { mFlyAnimator.end(); mFlyView.clearAnimation(); } mIsRefreshing = true; layout.setEnableRefresh(false); final int offDistX = ((View) mRefreshLayout).getWidth()-mFlyView.getLeft(); final int offDistY = -(mFlyView.getTop() - mOffset) * 2 / 3; ObjectAnimator transX = ObjectAnimator.ofFloat(mFlyView, "translationX", 0, offDistX); ObjectAnimator transY = ObjectAnimator.ofFloat(mFlyView, "translationY", 0, offDistY); transY.setInterpolator(PathInterpolatorCompat.create(0.7f, 1f)); ObjectAnimator rotation = ObjectAnimator.ofFloat(mFlyView, "rotation", mFlyView.getRotation(), 0); rotation.setInterpolator(new DecelerateInterpolator()); ObjectAnimator rotationX = ObjectAnimator.ofFloat(mFlyView, "rotationX", mFlyView.getRotationX(), 50); rotationX.setInterpolator(new DecelerateInterpolator()); AnimatorSet flyUpAnim = new AnimatorSet(); flyUpAnim.setDuration(800); flyUpAnim.playTogether(transX ,transY ,rotation ,rotationX ,ObjectAnimator.ofFloat(mFlyView, "scaleX", mFlyView.getScaleX(), 0.5f) ,ObjectAnimator.ofFloat(mFlyView, "scaleY", mFlyView.getScaleY(), 0.5f) ); mFlyAnimator = flyUpAnim; mFlyAnimator.start(); } }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { return PathInterpolatorCompat.create(0.55f, 0.085f, 0.68f, 0.53f); }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { return PathInterpolatorCompat.create(0.86f, 0f, 0.07f, 1f); }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { return PathInterpolatorCompat.create(0.19f, 1f, 0.22f, 1f); }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { return PathInterpolatorCompat.create(0.42f, 0.0f, 0.58f, 1.0f); }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { return PathInterpolatorCompat.create(0.77f, 0f, 0.175f, 1f); }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { return PathInterpolatorCompat.create(0.55f, 0.055f, 0.675f, 0.19f); }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { return PathInterpolatorCompat.create(0.25f, 0.46f, 0.45f, 0.94f); }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { return PathInterpolatorCompat.create(0.645f, 0.045f, 0.355f, 1f); }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { return PathInterpolatorCompat.create(0.895f, 0.03f, 0.685f, 0.22f); }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { return PathInterpolatorCompat.create(0.23f, 1f, 0.32f, 1f); }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { return PathInterpolatorCompat.create(0.175f, 0.885f, 0.32f, 1.275f); }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { return PathInterpolatorCompat.create(0.445f, 0.05f, 0.55f, 0.95f); }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { return PathInterpolatorCompat.create(0.165f, 0.84f, 0.44f, 1f); }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { final float force = animationBody.getForce(); return PathInterpolatorCompat.create(0.5f, 1.1f + force / 3, 1f, 1f); }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { return PathInterpolatorCompat.create(0.0f, 0.0f, 1.0f, 1.0f); }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { return PathInterpolatorCompat.create(0.95f, 0.05f, 0.795f, 0.035f); }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { return PathInterpolatorCompat.create(1f, 0f, 0f, 1f); }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { return PathInterpolatorCompat.create(0.6f, 0.04f, 0.98f, 0.335f); }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { return PathInterpolatorCompat.create(0.785f, 0.135f, 0.15f, 0.86f); }
@Override public Interpolator createInterpolatorFor(AnimationBody animationBody) { return PathInterpolatorCompat.create(0.47f, 0f, 0.745f, 0.715f); }