ADD week 5
This commit is contained in:
@@ -0,0 +1,150 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user