ADD week 5
This commit is contained in:
		
							
								
								
									
										133
									
								
								02-Easy5/E5/sources/androidx/transition/ArcMotion.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										133
									
								
								02-Easy5/E5/sources/androidx/transition/ArcMotion.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,133 @@ | ||||
| package androidx.transition; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.content.res.TypedArray; | ||||
| import android.graphics.Path; | ||||
| import android.util.AttributeSet; | ||||
| import androidx.core.content.res.TypedArrayUtils; | ||||
| import org.xmlpull.v1.XmlPullParser; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class ArcMotion extends PathMotion { | ||||
|     private static final float DEFAULT_MAX_ANGLE_DEGREES = 70.0f; | ||||
|     private static final float DEFAULT_MAX_TANGENT = (float) Math.tan(Math.toRadians(35.0d)); | ||||
|     private static final float DEFAULT_MIN_ANGLE_DEGREES = 0.0f; | ||||
|     private float mMaximumAngle; | ||||
|     private float mMaximumTangent; | ||||
|     private float mMinimumHorizontalAngle; | ||||
|     private float mMinimumHorizontalTangent; | ||||
|     private float mMinimumVerticalAngle; | ||||
|     private float mMinimumVerticalTangent; | ||||
|  | ||||
|     public float getMaximumAngle() { | ||||
|         return this.mMaximumAngle; | ||||
|     } | ||||
|  | ||||
|     public float getMinimumHorizontalAngle() { | ||||
|         return this.mMinimumHorizontalAngle; | ||||
|     } | ||||
|  | ||||
|     public float getMinimumVerticalAngle() { | ||||
|         return this.mMinimumVerticalAngle; | ||||
|     } | ||||
|  | ||||
|     public ArcMotion() { | ||||
|         this.mMinimumHorizontalAngle = 0.0f; | ||||
|         this.mMinimumVerticalAngle = 0.0f; | ||||
|         this.mMaximumAngle = DEFAULT_MAX_ANGLE_DEGREES; | ||||
|         this.mMinimumHorizontalTangent = 0.0f; | ||||
|         this.mMinimumVerticalTangent = 0.0f; | ||||
|         this.mMaximumTangent = DEFAULT_MAX_TANGENT; | ||||
|     } | ||||
|  | ||||
|     public ArcMotion(Context context, AttributeSet attributeSet) { | ||||
|         super(context, attributeSet); | ||||
|         this.mMinimumHorizontalAngle = 0.0f; | ||||
|         this.mMinimumVerticalAngle = 0.0f; | ||||
|         this.mMaximumAngle = DEFAULT_MAX_ANGLE_DEGREES; | ||||
|         this.mMinimumHorizontalTangent = 0.0f; | ||||
|         this.mMinimumVerticalTangent = 0.0f; | ||||
|         this.mMaximumTangent = DEFAULT_MAX_TANGENT; | ||||
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, Styleable.ARC_MOTION); | ||||
|         XmlPullParser xmlPullParser = (XmlPullParser) attributeSet; | ||||
|         setMinimumVerticalAngle(TypedArrayUtils.getNamedFloat(obtainStyledAttributes, xmlPullParser, "minimumVerticalAngle", 1, 0.0f)); | ||||
|         setMinimumHorizontalAngle(TypedArrayUtils.getNamedFloat(obtainStyledAttributes, xmlPullParser, "minimumHorizontalAngle", 0, 0.0f)); | ||||
|         setMaximumAngle(TypedArrayUtils.getNamedFloat(obtainStyledAttributes, xmlPullParser, "maximumAngle", 2, DEFAULT_MAX_ANGLE_DEGREES)); | ||||
|         obtainStyledAttributes.recycle(); | ||||
|     } | ||||
|  | ||||
|     public void setMinimumHorizontalAngle(float f) { | ||||
|         this.mMinimumHorizontalAngle = f; | ||||
|         this.mMinimumHorizontalTangent = toTangent(f); | ||||
|     } | ||||
|  | ||||
|     public void setMinimumVerticalAngle(float f) { | ||||
|         this.mMinimumVerticalAngle = f; | ||||
|         this.mMinimumVerticalTangent = toTangent(f); | ||||
|     } | ||||
|  | ||||
|     public void setMaximumAngle(float f) { | ||||
|         this.mMaximumAngle = f; | ||||
|         this.mMaximumTangent = toTangent(f); | ||||
|     } | ||||
|  | ||||
|     private static float toTangent(float f) { | ||||
|         if (f < 0.0f || f > 90.0f) { | ||||
|             throw new IllegalArgumentException("Arc must be between 0 and 90 degrees"); | ||||
|         } | ||||
|         return (float) Math.tan(Math.toRadians(f / 2.0f)); | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.transition.PathMotion | ||||
|     public Path getPath(float f, float f2, float f3, float f4) { | ||||
|         float f5; | ||||
|         float f6; | ||||
|         float f7; | ||||
|         Path path = new Path(); | ||||
|         path.moveTo(f, f2); | ||||
|         float f8 = f3 - f; | ||||
|         float f9 = f4 - f2; | ||||
|         float f10 = (f8 * f8) + (f9 * f9); | ||||
|         float f11 = (f + f3) / 2.0f; | ||||
|         float f12 = (f2 + f4) / 2.0f; | ||||
|         float f13 = 0.25f * f10; | ||||
|         boolean z = f2 > f4; | ||||
|         if (Math.abs(f8) < Math.abs(f9)) { | ||||
|             float abs = Math.abs(f10 / (f9 * 2.0f)); | ||||
|             if (z) { | ||||
|                 f6 = abs + f4; | ||||
|                 f5 = f3; | ||||
|             } else { | ||||
|                 f6 = abs + f2; | ||||
|                 f5 = f; | ||||
|             } | ||||
|             f7 = this.mMinimumVerticalTangent; | ||||
|         } else { | ||||
|             float f14 = f10 / (f8 * 2.0f); | ||||
|             if (z) { | ||||
|                 f6 = f2; | ||||
|                 f5 = f14 + f; | ||||
|             } else { | ||||
|                 f5 = f3 - f14; | ||||
|                 f6 = f4; | ||||
|             } | ||||
|             f7 = this.mMinimumHorizontalTangent; | ||||
|         } | ||||
|         float f15 = f13 * f7 * f7; | ||||
|         float f16 = f11 - f5; | ||||
|         float f17 = f12 - f6; | ||||
|         float f18 = (f16 * f16) + (f17 * f17); | ||||
|         float f19 = this.mMaximumTangent; | ||||
|         float f20 = f13 * f19 * f19; | ||||
|         if (f18 >= f15) { | ||||
|             f15 = f18 > f20 ? f20 : 0.0f; | ||||
|         } | ||||
|         if (f15 != 0.0f) { | ||||
|             float sqrt = (float) Math.sqrt(f15 / f18); | ||||
|             f5 = ((f5 - f11) * sqrt) + f11; | ||||
|             f6 = f12 + (sqrt * (f6 - f12)); | ||||
|         } | ||||
|         path.cubicTo((f + f5) / 2.0f, (f2 + f6) / 2.0f, (f5 + f3) / 2.0f, (f6 + f4) / 2.0f, f3, f4); | ||||
|         return path; | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user