ADD week 5
This commit is contained in:
		| @@ -0,0 +1,69 @@ | ||||
| package com.google.android.material.shape; | ||||
|  | ||||
| import android.view.View; | ||||
| import android.view.ViewTreeObserver; | ||||
| import android.widget.ScrollView; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class InterpolateOnScrollPositionChangeHelper { | ||||
|     private ScrollView containingScrollView; | ||||
|     private MaterialShapeDrawable materialShapeDrawable; | ||||
|     private View shapedView; | ||||
|     private final int[] scrollLocation = new int[2]; | ||||
|     private final int[] containerLocation = new int[2]; | ||||
|     private final ViewTreeObserver.OnScrollChangedListener scrollChangedListener = new ViewTreeObserver.OnScrollChangedListener() { // from class: com.google.android.material.shape.InterpolateOnScrollPositionChangeHelper.1 | ||||
|         @Override // android.view.ViewTreeObserver.OnScrollChangedListener | ||||
|         public void onScrollChanged() { | ||||
|             InterpolateOnScrollPositionChangeHelper.this.updateInterpolationForScreenPosition(); | ||||
|         } | ||||
|     }; | ||||
|  | ||||
|     public void setContainingScrollView(ScrollView scrollView) { | ||||
|         this.containingScrollView = scrollView; | ||||
|     } | ||||
|  | ||||
|     public void setMaterialShapeDrawable(MaterialShapeDrawable materialShapeDrawable) { | ||||
|         this.materialShapeDrawable = materialShapeDrawable; | ||||
|     } | ||||
|  | ||||
|     public InterpolateOnScrollPositionChangeHelper(View view, MaterialShapeDrawable materialShapeDrawable, ScrollView scrollView) { | ||||
|         this.shapedView = view; | ||||
|         this.materialShapeDrawable = materialShapeDrawable; | ||||
|         this.containingScrollView = scrollView; | ||||
|     } | ||||
|  | ||||
|     public void startListeningForScrollChanges(ViewTreeObserver viewTreeObserver) { | ||||
|         viewTreeObserver.addOnScrollChangedListener(this.scrollChangedListener); | ||||
|     } | ||||
|  | ||||
|     public void stopListeningForScrollChanges(ViewTreeObserver viewTreeObserver) { | ||||
|         viewTreeObserver.removeOnScrollChangedListener(this.scrollChangedListener); | ||||
|     } | ||||
|  | ||||
|     public void updateInterpolationForScreenPosition() { | ||||
|         ScrollView scrollView = this.containingScrollView; | ||||
|         if (scrollView == null) { | ||||
|             return; | ||||
|         } | ||||
|         if (scrollView.getChildCount() == 0) { | ||||
|             throw new IllegalStateException("Scroll bar must contain a child to calculate interpolation."); | ||||
|         } | ||||
|         this.containingScrollView.getLocationInWindow(this.scrollLocation); | ||||
|         this.containingScrollView.getChildAt(0).getLocationInWindow(this.containerLocation); | ||||
|         int top = (this.shapedView.getTop() - this.scrollLocation[1]) + this.containerLocation[1]; | ||||
|         int height = this.shapedView.getHeight(); | ||||
|         int height2 = this.containingScrollView.getHeight(); | ||||
|         if (top < 0) { | ||||
|             this.materialShapeDrawable.setInterpolation(Math.max(0.0f, Math.min(1.0f, (top / height) + 1.0f))); | ||||
|             this.shapedView.invalidate(); | ||||
|             return; | ||||
|         } | ||||
|         if (top + height > height2) { | ||||
|             this.materialShapeDrawable.setInterpolation(Math.max(0.0f, Math.min(1.0f, 1.0f - ((r0 - height2) / height)))); | ||||
|             this.shapedView.invalidate(); | ||||
|         } else if (this.materialShapeDrawable.getInterpolation() != 1.0f) { | ||||
|             this.materialShapeDrawable.setInterpolation(1.0f); | ||||
|             this.shapedView.invalidate(); | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user