ADD week 5
This commit is contained in:
		| @@ -0,0 +1,164 @@ | ||||
| package androidx.recyclerview.widget; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.graphics.PointF; | ||||
| import android.util.DisplayMetrics; | ||||
| import android.view.View; | ||||
| import android.view.animation.DecelerateInterpolator; | ||||
| import android.view.animation.LinearInterpolator; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class LinearSmoothScroller extends RecyclerView.SmoothScroller { | ||||
|     private static final boolean DEBUG = false; | ||||
|     private static final float MILLISECONDS_PER_INCH = 25.0f; | ||||
|     public static final int SNAP_TO_ANY = 0; | ||||
|     public static final int SNAP_TO_END = 1; | ||||
|     public static final int SNAP_TO_START = -1; | ||||
|     private static final float TARGET_SEEK_EXTRA_SCROLL_RATIO = 1.2f; | ||||
|     private static final int TARGET_SEEK_SCROLL_DISTANCE_PX = 10000; | ||||
|     private final DisplayMetrics mDisplayMetrics; | ||||
|     private float mMillisPerPixel; | ||||
|     protected PointF mTargetVector; | ||||
|     protected final LinearInterpolator mLinearInterpolator = new LinearInterpolator(); | ||||
|     protected final DecelerateInterpolator mDecelerateInterpolator = new DecelerateInterpolator(); | ||||
|     private boolean mHasCalculatedMillisPerPixel = false; | ||||
|     protected int mInterimTargetDx = 0; | ||||
|     protected int mInterimTargetDy = 0; | ||||
|  | ||||
|     private int clampApplyScroll(int i, int i2) { | ||||
|         int i3 = i - i2; | ||||
|         if (i * i3 <= 0) { | ||||
|             return 0; | ||||
|         } | ||||
|         return i3; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.recyclerview.widget.RecyclerView.SmoothScroller | ||||
|     protected void onStart() { | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.recyclerview.widget.RecyclerView.SmoothScroller | ||||
|     protected void onStop() { | ||||
|         this.mInterimTargetDy = 0; | ||||
|         this.mInterimTargetDx = 0; | ||||
|         this.mTargetVector = null; | ||||
|     } | ||||
|  | ||||
|     public LinearSmoothScroller(Context context) { | ||||
|         this.mDisplayMetrics = context.getResources().getDisplayMetrics(); | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.recyclerview.widget.RecyclerView.SmoothScroller | ||||
|     protected void onTargetFound(View view, RecyclerView.State state, RecyclerView.SmoothScroller.Action action) { | ||||
|         int calculateDxToMakeVisible = calculateDxToMakeVisible(view, getHorizontalSnapPreference()); | ||||
|         int calculateDyToMakeVisible = calculateDyToMakeVisible(view, getVerticalSnapPreference()); | ||||
|         int calculateTimeForDeceleration = calculateTimeForDeceleration((int) Math.sqrt((calculateDxToMakeVisible * calculateDxToMakeVisible) + (calculateDyToMakeVisible * calculateDyToMakeVisible))); | ||||
|         if (calculateTimeForDeceleration > 0) { | ||||
|             action.update(-calculateDxToMakeVisible, -calculateDyToMakeVisible, calculateTimeForDeceleration, this.mDecelerateInterpolator); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.recyclerview.widget.RecyclerView.SmoothScroller | ||||
|     protected void onSeekTargetStep(int i, int i2, RecyclerView.State state, RecyclerView.SmoothScroller.Action action) { | ||||
|         if (getChildCount() == 0) { | ||||
|             stop(); | ||||
|             return; | ||||
|         } | ||||
|         this.mInterimTargetDx = clampApplyScroll(this.mInterimTargetDx, i); | ||||
|         int clampApplyScroll = clampApplyScroll(this.mInterimTargetDy, i2); | ||||
|         this.mInterimTargetDy = clampApplyScroll; | ||||
|         if (this.mInterimTargetDx == 0 && clampApplyScroll == 0) { | ||||
|             updateActionForInterimTarget(action); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) { | ||||
|         return MILLISECONDS_PER_INCH / displayMetrics.densityDpi; | ||||
|     } | ||||
|  | ||||
|     private float getSpeedPerPixel() { | ||||
|         if (!this.mHasCalculatedMillisPerPixel) { | ||||
|             this.mMillisPerPixel = calculateSpeedPerPixel(this.mDisplayMetrics); | ||||
|             this.mHasCalculatedMillisPerPixel = true; | ||||
|         } | ||||
|         return this.mMillisPerPixel; | ||||
|     } | ||||
|  | ||||
|     protected int calculateTimeForDeceleration(int i) { | ||||
|         return (int) Math.ceil(calculateTimeForScrolling(i) / 0.3356d); | ||||
|     } | ||||
|  | ||||
|     protected int calculateTimeForScrolling(int i) { | ||||
|         return (int) Math.ceil(Math.abs(i) * getSpeedPerPixel()); | ||||
|     } | ||||
|  | ||||
|     protected int getHorizontalSnapPreference() { | ||||
|         PointF pointF = this.mTargetVector; | ||||
|         if (pointF == null || pointF.x == 0.0f) { | ||||
|             return 0; | ||||
|         } | ||||
|         return this.mTargetVector.x > 0.0f ? 1 : -1; | ||||
|     } | ||||
|  | ||||
|     protected int getVerticalSnapPreference() { | ||||
|         PointF pointF = this.mTargetVector; | ||||
|         if (pointF == null || pointF.y == 0.0f) { | ||||
|             return 0; | ||||
|         } | ||||
|         return this.mTargetVector.y > 0.0f ? 1 : -1; | ||||
|     } | ||||
|  | ||||
|     protected void updateActionForInterimTarget(RecyclerView.SmoothScroller.Action action) { | ||||
|         PointF computeScrollVectorForPosition = computeScrollVectorForPosition(getTargetPosition()); | ||||
|         if (computeScrollVectorForPosition == null || (computeScrollVectorForPosition.x == 0.0f && computeScrollVectorForPosition.y == 0.0f)) { | ||||
|             action.jumpTo(getTargetPosition()); | ||||
|             stop(); | ||||
|             return; | ||||
|         } | ||||
|         normalize(computeScrollVectorForPosition); | ||||
|         this.mTargetVector = computeScrollVectorForPosition; | ||||
|         this.mInterimTargetDx = (int) (computeScrollVectorForPosition.x * 10000.0f); | ||||
|         this.mInterimTargetDy = (int) (computeScrollVectorForPosition.y * 10000.0f); | ||||
|         action.update((int) (this.mInterimTargetDx * TARGET_SEEK_EXTRA_SCROLL_RATIO), (int) (this.mInterimTargetDy * TARGET_SEEK_EXTRA_SCROLL_RATIO), (int) (calculateTimeForScrolling(TARGET_SEEK_SCROLL_DISTANCE_PX) * TARGET_SEEK_EXTRA_SCROLL_RATIO), this.mLinearInterpolator); | ||||
|     } | ||||
|  | ||||
|     public int calculateDtToFit(int i, int i2, int i3, int i4, int i5) { | ||||
|         if (i5 == -1) { | ||||
|             return i3 - i; | ||||
|         } | ||||
|         if (i5 != 0) { | ||||
|             if (i5 == 1) { | ||||
|                 return i4 - i2; | ||||
|             } | ||||
|             throw new IllegalArgumentException("snap preference should be one of the constants defined in SmoothScroller, starting with SNAP_"); | ||||
|         } | ||||
|         int i6 = i3 - i; | ||||
|         if (i6 > 0) { | ||||
|             return i6; | ||||
|         } | ||||
|         int i7 = i4 - i2; | ||||
|         if (i7 < 0) { | ||||
|             return i7; | ||||
|         } | ||||
|         return 0; | ||||
|     } | ||||
|  | ||||
|     public int calculateDyToMakeVisible(View view, int i) { | ||||
|         RecyclerView.LayoutManager layoutManager = getLayoutManager(); | ||||
|         if (layoutManager == null || !layoutManager.canScrollVertically()) { | ||||
|             return 0; | ||||
|         } | ||||
|         RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) view.getLayoutParams(); | ||||
|         return calculateDtToFit(layoutManager.getDecoratedTop(view) - layoutParams.topMargin, layoutManager.getDecoratedBottom(view) + layoutParams.bottomMargin, layoutManager.getPaddingTop(), layoutManager.getHeight() - layoutManager.getPaddingBottom(), i); | ||||
|     } | ||||
|  | ||||
|     public int calculateDxToMakeVisible(View view, int i) { | ||||
|         RecyclerView.LayoutManager layoutManager = getLayoutManager(); | ||||
|         if (layoutManager == null || !layoutManager.canScrollHorizontally()) { | ||||
|             return 0; | ||||
|         } | ||||
|         RecyclerView.LayoutParams layoutParams = (RecyclerView.LayoutParams) view.getLayoutParams(); | ||||
|         return calculateDtToFit(layoutManager.getDecoratedLeft(view) - layoutParams.leftMargin, layoutManager.getDecoratedRight(view) + layoutParams.rightMargin, layoutManager.getPaddingLeft(), layoutManager.getWidth() - layoutManager.getPaddingRight(), i); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user