ADD week 5
This commit is contained in:
		| @@ -0,0 +1,91 @@ | ||||
| package androidx.transition; | ||||
|  | ||||
| import android.content.Context; | ||||
| import android.content.res.TypedArray; | ||||
| import android.graphics.Matrix; | ||||
| import android.graphics.Path; | ||||
| import android.graphics.PathMeasure; | ||||
| import android.util.AttributeSet; | ||||
| import androidx.core.content.res.TypedArrayUtils; | ||||
| import androidx.core.graphics.PathParser; | ||||
| import org.xmlpull.v1.XmlPullParser; | ||||
|  | ||||
| /* loaded from: classes.dex */ | ||||
| public class PatternPathMotion extends PathMotion { | ||||
|     private Path mOriginalPatternPath; | ||||
|     private final Path mPatternPath; | ||||
|     private final Matrix mTempMatrix; | ||||
|  | ||||
|     public Path getPatternPath() { | ||||
|         return this.mOriginalPatternPath; | ||||
|     } | ||||
|  | ||||
|     public PatternPathMotion() { | ||||
|         Path path = new Path(); | ||||
|         this.mPatternPath = path; | ||||
|         this.mTempMatrix = new Matrix(); | ||||
|         path.lineTo(1.0f, 0.0f); | ||||
|         this.mOriginalPatternPath = path; | ||||
|     } | ||||
|  | ||||
|     public PatternPathMotion(Context context, AttributeSet attributeSet) { | ||||
|         this.mPatternPath = new Path(); | ||||
|         this.mTempMatrix = new Matrix(); | ||||
|         TypedArray obtainStyledAttributes = context.obtainStyledAttributes(attributeSet, Styleable.PATTERN_PATH_MOTION); | ||||
|         try { | ||||
|             String namedString = TypedArrayUtils.getNamedString(obtainStyledAttributes, (XmlPullParser) attributeSet, "patternPathData", 0); | ||||
|             if (namedString == null) { | ||||
|                 throw new RuntimeException("pathData must be supplied for patternPathMotion"); | ||||
|             } | ||||
|             setPatternPath(PathParser.createPathFromPathData(namedString)); | ||||
|         } finally { | ||||
|             obtainStyledAttributes.recycle(); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     public PatternPathMotion(Path path) { | ||||
|         this.mPatternPath = new Path(); | ||||
|         this.mTempMatrix = new Matrix(); | ||||
|         setPatternPath(path); | ||||
|     } | ||||
|  | ||||
|     public void setPatternPath(Path path) { | ||||
|         PathMeasure pathMeasure = new PathMeasure(path, false); | ||||
|         float[] fArr = new float[2]; | ||||
|         pathMeasure.getPosTan(pathMeasure.getLength(), fArr, null); | ||||
|         float f = fArr[0]; | ||||
|         float f2 = fArr[1]; | ||||
|         pathMeasure.getPosTan(0.0f, fArr, null); | ||||
|         float f3 = fArr[0]; | ||||
|         float f4 = fArr[1]; | ||||
|         if (f3 == f && f4 == f2) { | ||||
|             throw new IllegalArgumentException("pattern must not end at the starting point"); | ||||
|         } | ||||
|         this.mTempMatrix.setTranslate(-f3, -f4); | ||||
|         float f5 = f - f3; | ||||
|         float f6 = f2 - f4; | ||||
|         float distance = 1.0f / distance(f5, f6); | ||||
|         this.mTempMatrix.postScale(distance, distance); | ||||
|         this.mTempMatrix.postRotate((float) Math.toDegrees(-Math.atan2(f6, f5))); | ||||
|         path.transform(this.mTempMatrix, this.mPatternPath); | ||||
|         this.mOriginalPatternPath = path; | ||||
|     } | ||||
|  | ||||
|     @Override // androidx.transition.PathMotion | ||||
|     public Path getPath(float f, float f2, float f3, float f4) { | ||||
|         float f5 = f3 - f; | ||||
|         float f6 = f4 - f2; | ||||
|         float distance = distance(f5, f6); | ||||
|         double atan2 = Math.atan2(f6, f5); | ||||
|         this.mTempMatrix.setScale(distance, distance); | ||||
|         this.mTempMatrix.postRotate((float) Math.toDegrees(atan2)); | ||||
|         this.mTempMatrix.postTranslate(f, f2); | ||||
|         Path path = new Path(); | ||||
|         this.mPatternPath.transform(this.mTempMatrix, path); | ||||
|         return path; | ||||
|     } | ||||
|  | ||||
|     private static float distance(float f, float f2) { | ||||
|         return (float) Math.sqrt((f * f) + (f2 * f2)); | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user