赞
踩
- import android.content.Context;
- import android.content.res.TypedArray;
- import android.graphics.Canvas;
- import android.graphics.Paint;
- import android.graphics.Path;
- import android.graphics.RectF;
- import android.util.AttributeSet;
-
- import androidx.annotation.NonNull;
- import androidx.annotation.Nullable;
- import androidx.constraintlayout.widget.ConstraintLayout;
-
- import com.blankj.utilcode.util.ConvertUtils;
- import com.hanvonscanner.common.R;
-
- public class CornerConstraintLayout extends ConstraintLayout {
- private static final float RADIUS_DEFAULT = -1f;
- private Paint mPaint;
- private float mRadius;
- private float mTopLeftRadius, mTopRightRadius, mBottomLeftRadius, mBottomRightRadius;
- private float[] corners;
-
- public CornerConstraintLayout(@NonNull Context context) {
- this(context, null);
- }
-
- public CornerConstraintLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- public CornerConstraintLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
-
- TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CornerConstraintLayout);
- mRadius = typedArray.getDimension(R.styleable.CornerConstraintLayout_android_radius, RADIUS_DEFAULT);
- mTopLeftRadius = typedArray.getDimension(R.styleable.CornerConstraintLayout_android_topLeftRadius, RADIUS_DEFAULT);
- mTopRightRadius = typedArray.getDimension(R.styleable.CornerConstraintLayout_android_topRightRadius, RADIUS_DEFAULT);
- mBottomLeftRadius = typedArray.getDimension(R.styleable.CornerConstraintLayout_android_bottomLeftRadius, RADIUS_DEFAULT);
- mBottomRightRadius = typedArray.getDimension(R.styleable.CornerConstraintLayout_android_bottomRightRadius, RADIUS_DEFAULT);
- typedArray.recycle();
-
-
- mPaint = new Paint();
- mPaint.setAntiAlias(true);
-
- if (mRadius <= RADIUS_DEFAULT){
- mRadius = 0;
- }
- corners = new float[]{
- mRadius, mRadius, // Top left radius in px
- mRadius, mRadius, // Top right radius in px
- mRadius, mRadius, // Bottom right radius in px
- mRadius, mRadius, // Bottom left radius in px
- };
-
- if (mTopLeftRadius > RADIUS_DEFAULT){
- corners[0] = mTopLeftRadius;
- corners[1] = mTopLeftRadius;
- }
- if (mTopRightRadius > RADIUS_DEFAULT){
- corners[2] = mTopRightRadius;
- corners[3] = mTopRightRadius;
- }
- if (mBottomRightRadius > RADIUS_DEFAULT){
- corners[4] = mBottomRightRadius;
- corners[5] = mBottomRightRadius;
- }
-
- if (mBottomLeftRadius > RADIUS_DEFAULT){
- corners[6] = mBottomLeftRadius;
- corners[7] = mBottomLeftRadius;
- }
- }
-
- @Override
- protected void onDraw(Canvas canvas) {
- RectF rect = new RectF(0, 0, getWidth(), getHeight());
- Path path = new Path();
- path.addRoundRect(rect, corners, Path.Direction.CW);
- canvas.clipPath(path);
- }
- }

- <declare-styleable name="CornerConstraintLayout">
- <attr name="android:radius" />
- <!-- Radius of the top left corner. -->
- <attr name="android:topLeftRadius" />
- <!-- Radius of the top right corner. -->
- <attr name="android:topRightRadius" />
- <!-- Radius of the bottom left corner. -->
- <attr name="android:bottomLeftRadius" />
- <!-- Radius of the bottom right corner. -->
- <attr name="android:bottomRightRadius" />
- </declare-styleable>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。