mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2025-01-09 13:43:22 +00:00
70 lines
3.1 KiB
Java
70 lines
3.1 KiB
Java
![]() |
package com.google.android.material.shape;
|
||
|
|
||
|
import android.view.View;
|
||
|
import android.view.ViewTreeObserver;
|
||
|
import android.widget.ScrollView;
|
||
|
|
||
|
/* loaded from: classes2.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();
|
||
|
}
|
||
|
}
|
||
|
}
|