151 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			151 lines
		
	
	
		
			5.4 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package androidx.constraintlayout.utils.widget;
 | |
| 
 | |
| import android.content.Context;
 | |
| import android.content.res.TypedArray;
 | |
| import android.graphics.Canvas;
 | |
| import android.graphics.Outline;
 | |
| import android.graphics.Path;
 | |
| import android.graphics.RectF;
 | |
| import android.util.AttributeSet;
 | |
| import android.view.View;
 | |
| import android.view.ViewOutlineProvider;
 | |
| import androidx.appcompat.widget.AppCompatButton;
 | |
| import androidx.constraintlayout.widget.R;
 | |
| 
 | |
| /* loaded from: classes.dex */
 | |
| public class MotionButton extends AppCompatButton {
 | |
|     private Path mPath;
 | |
|     RectF mRect;
 | |
|     private float mRound;
 | |
|     private float mRoundPercent;
 | |
|     ViewOutlineProvider mViewOutlineProvider;
 | |
| 
 | |
|     public float getRound() {
 | |
|         return this.mRound;
 | |
|     }
 | |
| 
 | |
|     public float getRoundPercent() {
 | |
|         return this.mRoundPercent;
 | |
|     }
 | |
| 
 | |
|     public MotionButton(Context context) {
 | |
|         super(context);
 | |
|         this.mRoundPercent = 0.0f;
 | |
|         this.mRound = Float.NaN;
 | |
|         init(context, null);
 | |
|     }
 | |
| 
 | |
|     public MotionButton(Context context, AttributeSet attrs) {
 | |
|         super(context, attrs);
 | |
|         this.mRoundPercent = 0.0f;
 | |
|         this.mRound = Float.NaN;
 | |
|         init(context, attrs);
 | |
|     }
 | |
| 
 | |
|     public MotionButton(Context context, AttributeSet attrs, int defStyleAttr) {
 | |
|         super(context, attrs, defStyleAttr);
 | |
|         this.mRoundPercent = 0.0f;
 | |
|         this.mRound = Float.NaN;
 | |
|         init(context, attrs);
 | |
|     }
 | |
| 
 | |
|     private void init(Context context, AttributeSet attrs) {
 | |
|         setPadding(0, 0, 0, 0);
 | |
|         if (attrs != null) {
 | |
|             TypedArray obtainStyledAttributes = getContext().obtainStyledAttributes(attrs, R.styleable.ImageFilterView);
 | |
|             int indexCount = obtainStyledAttributes.getIndexCount();
 | |
|             for (int i = 0; i < indexCount; i++) {
 | |
|                 int index = obtainStyledAttributes.getIndex(i);
 | |
|                 if (index == R.styleable.ImageFilterView_round) {
 | |
|                     setRound(obtainStyledAttributes.getDimension(index, 0.0f));
 | |
|                 } else if (index == R.styleable.ImageFilterView_roundPercent) {
 | |
|                     setRoundPercent(obtainStyledAttributes.getFloat(index, 0.0f));
 | |
|                 }
 | |
|             }
 | |
|             obtainStyledAttributes.recycle();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setRoundPercent(float round) {
 | |
|         boolean z = this.mRoundPercent != round;
 | |
|         this.mRoundPercent = round;
 | |
|         if (round != 0.0f) {
 | |
|             if (this.mPath == null) {
 | |
|                 this.mPath = new Path();
 | |
|             }
 | |
|             if (this.mRect == null) {
 | |
|                 this.mRect = new RectF();
 | |
|             }
 | |
|             if (this.mViewOutlineProvider == null) {
 | |
|                 ViewOutlineProvider viewOutlineProvider = new ViewOutlineProvider() { // from class: androidx.constraintlayout.utils.widget.MotionButton.1
 | |
|                     @Override // android.view.ViewOutlineProvider
 | |
|                     public void getOutline(View view, Outline outline) {
 | |
|                         outline.setRoundRect(0, 0, MotionButton.this.getWidth(), MotionButton.this.getHeight(), (Math.min(r3, r4) * MotionButton.this.mRoundPercent) / 2.0f);
 | |
|                     }
 | |
|                 };
 | |
|                 this.mViewOutlineProvider = viewOutlineProvider;
 | |
|                 setOutlineProvider(viewOutlineProvider);
 | |
|             }
 | |
|             setClipToOutline(true);
 | |
|             int width = getWidth();
 | |
|             int height = getHeight();
 | |
|             float min = (Math.min(width, height) * this.mRoundPercent) / 2.0f;
 | |
|             this.mRect.set(0.0f, 0.0f, width, height);
 | |
|             this.mPath.reset();
 | |
|             this.mPath.addRoundRect(this.mRect, min, min, Path.Direction.CW);
 | |
|         } else {
 | |
|             setClipToOutline(false);
 | |
|         }
 | |
|         if (z) {
 | |
|             invalidateOutline();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public void setRound(float round) {
 | |
|         if (Float.isNaN(round)) {
 | |
|             this.mRound = round;
 | |
|             float f = this.mRoundPercent;
 | |
|             this.mRoundPercent = -1.0f;
 | |
|             setRoundPercent(f);
 | |
|             return;
 | |
|         }
 | |
|         boolean z = this.mRound != round;
 | |
|         this.mRound = round;
 | |
|         if (round != 0.0f) {
 | |
|             if (this.mPath == null) {
 | |
|                 this.mPath = new Path();
 | |
|             }
 | |
|             if (this.mRect == null) {
 | |
|                 this.mRect = new RectF();
 | |
|             }
 | |
|             if (this.mViewOutlineProvider == null) {
 | |
|                 ViewOutlineProvider viewOutlineProvider = new ViewOutlineProvider() { // from class: androidx.constraintlayout.utils.widget.MotionButton.2
 | |
|                     @Override // android.view.ViewOutlineProvider
 | |
|                     public void getOutline(View view, Outline outline) {
 | |
|                         outline.setRoundRect(0, 0, MotionButton.this.getWidth(), MotionButton.this.getHeight(), MotionButton.this.mRound);
 | |
|                     }
 | |
|                 };
 | |
|                 this.mViewOutlineProvider = viewOutlineProvider;
 | |
|                 setOutlineProvider(viewOutlineProvider);
 | |
|             }
 | |
|             setClipToOutline(true);
 | |
|             this.mRect.set(0.0f, 0.0f, getWidth(), getHeight());
 | |
|             this.mPath.reset();
 | |
|             Path path = this.mPath;
 | |
|             RectF rectF = this.mRect;
 | |
|             float f2 = this.mRound;
 | |
|             path.addRoundRect(rectF, f2, f2, Path.Direction.CW);
 | |
|         } else {
 | |
|             setClipToOutline(false);
 | |
|         }
 | |
|         if (z) {
 | |
|             invalidateOutline();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     @Override // android.view.View
 | |
|     public void draw(Canvas canvas) {
 | |
|         super.draw(canvas);
 | |
|     }
 | |
| }
 |