ADD week 5
This commit is contained in:
		| @@ -0,0 +1,179 @@ | ||||
| package androidx.recyclerview.widget; | ||||
|  | ||||
| import android.graphics.PointF; | ||||
| import android.util.DisplayMetrics; | ||||
| import android.view.View; | ||||
| import androidx.recyclerview.widget.RecyclerView; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class PagerSnapHelper extends SnapHelper { | ||||
|     private static final int MAX_SCROLL_ON_FLING_DURATION = 100; | ||||
|     private OrientationHelper mHorizontalHelper; | ||||
|     private OrientationHelper mVerticalHelper; | ||||
|  | ||||
|     @Override // androidx.recyclerview.widget.SnapHelper | ||||
|     public int[] calculateDistanceToFinalSnap(RecyclerView.LayoutManager layoutManager, View view) { | ||||
|         int[] iArr = new int[2]; | ||||
|         if (layoutManager.canScrollHorizontally()) { | ||||
|             iArr[0] = distanceToCenter(layoutManager, view, getHorizontalHelper(layoutManager)); | ||||
|         } else { | ||||
|             iArr[0] = 0; | ||||
|         } | ||||
|         if (layoutManager.canScrollVertically()) { | ||||
|             iArr[1] = distanceToCenter(layoutManager, view, getVerticalHelper(layoutManager)); | ||||
|         } else { | ||||
|             iArr[1] = 0; | ||||
|         } | ||||
|         return iArr; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.recyclerview.widget.SnapHelper | ||||
|     public View findSnapView(RecyclerView.LayoutManager layoutManager) { | ||||
|         if (layoutManager.canScrollVertically()) { | ||||
|             return findCenterView(layoutManager, getVerticalHelper(layoutManager)); | ||||
|         } | ||||
|         if (layoutManager.canScrollHorizontally()) { | ||||
|             return findCenterView(layoutManager, getHorizontalHelper(layoutManager)); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.recyclerview.widget.SnapHelper | ||||
|     public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int i, int i2) { | ||||
|         OrientationHelper orientationHelper; | ||||
|         int itemCount = layoutManager.getItemCount(); | ||||
|         if (itemCount == 0 || (orientationHelper = getOrientationHelper(layoutManager)) == null) { | ||||
|             return -1; | ||||
|         } | ||||
|         int childCount = layoutManager.getChildCount(); | ||||
|         View view = null; | ||||
|         View view2 = null; | ||||
|         int i3 = Integer.MIN_VALUE; | ||||
|         int i4 = Integer.MAX_VALUE; | ||||
|         for (int i5 = 0; i5 < childCount; i5++) { | ||||
|             View childAt = layoutManager.getChildAt(i5); | ||||
|             if (childAt != null) { | ||||
|                 int distanceToCenter = distanceToCenter(layoutManager, childAt, orientationHelper); | ||||
|                 if (distanceToCenter <= 0 && distanceToCenter > i3) { | ||||
|                     view2 = childAt; | ||||
|                     i3 = distanceToCenter; | ||||
|                 } | ||||
|                 if (distanceToCenter >= 0 && distanceToCenter < i4) { | ||||
|                     view = childAt; | ||||
|                     i4 = distanceToCenter; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|         boolean isForwardFling = isForwardFling(layoutManager, i, i2); | ||||
|         if (isForwardFling && view != null) { | ||||
|             return layoutManager.getPosition(view); | ||||
|         } | ||||
|         if (!isForwardFling && view2 != null) { | ||||
|             return layoutManager.getPosition(view2); | ||||
|         } | ||||
|         if (isForwardFling) { | ||||
|             view = view2; | ||||
|         } | ||||
|         if (view == null) { | ||||
|             return -1; | ||||
|         } | ||||
|         int position = layoutManager.getPosition(view) + (isReverseLayout(layoutManager) == isForwardFling ? -1 : 1); | ||||
|         if (position < 0 || position >= itemCount) { | ||||
|             return -1; | ||||
|         } | ||||
|         return position; | ||||
|     } | ||||
|  | ||||
|     private boolean isForwardFling(RecyclerView.LayoutManager layoutManager, int i, int i2) { | ||||
|         return layoutManager.canScrollHorizontally() ? i > 0 : i2 > 0; | ||||
|     } | ||||
|  | ||||
|     /* JADX WARN: Multi-variable type inference failed */ | ||||
|     private boolean isReverseLayout(RecyclerView.LayoutManager layoutManager) { | ||||
|         PointF computeScrollVectorForPosition; | ||||
|         int itemCount = layoutManager.getItemCount(); | ||||
|         if (!(layoutManager instanceof RecyclerView.SmoothScroller.ScrollVectorProvider) || (computeScrollVectorForPosition = ((RecyclerView.SmoothScroller.ScrollVectorProvider) layoutManager).computeScrollVectorForPosition(itemCount - 1)) == null) { | ||||
|             return false; | ||||
|         } | ||||
|         return computeScrollVectorForPosition.x < 0.0f || computeScrollVectorForPosition.y < 0.0f; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.recyclerview.widget.SnapHelper | ||||
|     protected LinearSmoothScroller createSnapScroller(RecyclerView.LayoutManager layoutManager) { | ||||
|         if (layoutManager instanceof RecyclerView.SmoothScroller.ScrollVectorProvider) { | ||||
|             return new LinearSmoothScroller(this.mRecyclerView.getContext()) { // from class: androidx.recyclerview.widget.PagerSnapHelper.1 | ||||
|                 @Override // androidx.recyclerview.widget.LinearSmoothScroller, androidx.recyclerview.widget.RecyclerView.SmoothScroller | ||||
|                 protected void onTargetFound(View view, RecyclerView.State state, RecyclerView.SmoothScroller.Action action) { | ||||
|                     PagerSnapHelper pagerSnapHelper = PagerSnapHelper.this; | ||||
|                     int[] calculateDistanceToFinalSnap = pagerSnapHelper.calculateDistanceToFinalSnap(pagerSnapHelper.mRecyclerView.getLayoutManager(), view); | ||||
|                     int i = calculateDistanceToFinalSnap[0]; | ||||
|                     int i2 = calculateDistanceToFinalSnap[1]; | ||||
|                     int calculateTimeForDeceleration = calculateTimeForDeceleration(Math.max(Math.abs(i), Math.abs(i2))); | ||||
|                     if (calculateTimeForDeceleration > 0) { | ||||
|                         action.update(i, i2, calculateTimeForDeceleration, this.mDecelerateInterpolator); | ||||
|                     } | ||||
|                 } | ||||
|  | ||||
|                 @Override // androidx.recyclerview.widget.LinearSmoothScroller | ||||
|                 protected float calculateSpeedPerPixel(DisplayMetrics displayMetrics) { | ||||
|                     return 100.0f / displayMetrics.densityDpi; | ||||
|                 } | ||||
|  | ||||
|                 @Override // androidx.recyclerview.widget.LinearSmoothScroller | ||||
|                 protected int calculateTimeForScrolling(int i) { | ||||
|                     return Math.min(100, super.calculateTimeForScrolling(i)); | ||||
|                 } | ||||
|             }; | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     private int distanceToCenter(RecyclerView.LayoutManager layoutManager, View view, OrientationHelper orientationHelper) { | ||||
|         return (orientationHelper.getDecoratedStart(view) + (orientationHelper.getDecoratedMeasurement(view) / 2)) - (orientationHelper.getStartAfterPadding() + (orientationHelper.getTotalSpace() / 2)); | ||||
|     } | ||||
|  | ||||
|     private View findCenterView(RecyclerView.LayoutManager layoutManager, OrientationHelper orientationHelper) { | ||||
|         int childCount = layoutManager.getChildCount(); | ||||
|         View view = null; | ||||
|         if (childCount == 0) { | ||||
|             return null; | ||||
|         } | ||||
|         int startAfterPadding = orientationHelper.getStartAfterPadding() + (orientationHelper.getTotalSpace() / 2); | ||||
|         int i = Integer.MAX_VALUE; | ||||
|         for (int i2 = 0; i2 < childCount; i2++) { | ||||
|             View childAt = layoutManager.getChildAt(i2); | ||||
|             int abs = Math.abs((orientationHelper.getDecoratedStart(childAt) + (orientationHelper.getDecoratedMeasurement(childAt) / 2)) - startAfterPadding); | ||||
|             if (abs < i) { | ||||
|                 view = childAt; | ||||
|                 i = abs; | ||||
|             } | ||||
|         } | ||||
|         return view; | ||||
|     } | ||||
|  | ||||
|     private OrientationHelper getOrientationHelper(RecyclerView.LayoutManager layoutManager) { | ||||
|         if (layoutManager.canScrollVertically()) { | ||||
|             return getVerticalHelper(layoutManager); | ||||
|         } | ||||
|         if (layoutManager.canScrollHorizontally()) { | ||||
|             return getHorizontalHelper(layoutManager); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     private OrientationHelper getVerticalHelper(RecyclerView.LayoutManager layoutManager) { | ||||
|         OrientationHelper orientationHelper = this.mVerticalHelper; | ||||
|         if (orientationHelper == null || orientationHelper.mLayoutManager != layoutManager) { | ||||
|             this.mVerticalHelper = OrientationHelper.createVerticalHelper(layoutManager); | ||||
|         } | ||||
|         return this.mVerticalHelper; | ||||
|     } | ||||
|  | ||||
|     private OrientationHelper getHorizontalHelper(RecyclerView.LayoutManager layoutManager) { | ||||
|         OrientationHelper orientationHelper = this.mHorizontalHelper; | ||||
|         if (orientationHelper == null || orientationHelper.mLayoutManager != layoutManager) { | ||||
|             this.mHorizontalHelper = OrientationHelper.createHorizontalHelper(layoutManager); | ||||
|         } | ||||
|         return this.mHorizontalHelper; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user