当前位置:   article > 正文

带圆角的CornerConstraintLayout_constraintlayout代码加圆角

constraintlayout代码加圆角
  1. import android.content.Context;
  2. import android.content.res.TypedArray;
  3. import android.graphics.Canvas;
  4. import android.graphics.Paint;
  5. import android.graphics.Path;
  6. import android.graphics.RectF;
  7. import android.util.AttributeSet;
  8. import androidx.annotation.NonNull;
  9. import androidx.annotation.Nullable;
  10. import androidx.constraintlayout.widget.ConstraintLayout;
  11. import com.blankj.utilcode.util.ConvertUtils;
  12. import com.hanvonscanner.common.R;
  13. public class CornerConstraintLayout extends ConstraintLayout {
  14. private static final float RADIUS_DEFAULT = -1f;
  15. private Paint mPaint;
  16. private float mRadius;
  17. private float mTopLeftRadius, mTopRightRadius, mBottomLeftRadius, mBottomRightRadius;
  18. private float[] corners;
  19. public CornerConstraintLayout(@NonNull Context context) {
  20. this(context, null);
  21. }
  22. public CornerConstraintLayout(@NonNull Context context, @Nullable AttributeSet attrs) {
  23. this(context, attrs, 0);
  24. }
  25. public CornerConstraintLayout(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
  26. super(context, attrs, defStyleAttr);
  27. TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CornerConstraintLayout);
  28. mRadius = typedArray.getDimension(R.styleable.CornerConstraintLayout_android_radius, RADIUS_DEFAULT);
  29. mTopLeftRadius = typedArray.getDimension(R.styleable.CornerConstraintLayout_android_topLeftRadius, RADIUS_DEFAULT);
  30. mTopRightRadius = typedArray.getDimension(R.styleable.CornerConstraintLayout_android_topRightRadius, RADIUS_DEFAULT);
  31. mBottomLeftRadius = typedArray.getDimension(R.styleable.CornerConstraintLayout_android_bottomLeftRadius, RADIUS_DEFAULT);
  32. mBottomRightRadius = typedArray.getDimension(R.styleable.CornerConstraintLayout_android_bottomRightRadius, RADIUS_DEFAULT);
  33. typedArray.recycle();
  34. mPaint = new Paint();
  35. mPaint.setAntiAlias(true);
  36. if (mRadius <= RADIUS_DEFAULT){
  37. mRadius = 0;
  38. }
  39. corners = new float[]{
  40. mRadius, mRadius, // Top left radius in px
  41. mRadius, mRadius, // Top right radius in px
  42. mRadius, mRadius, // Bottom right radius in px
  43. mRadius, mRadius, // Bottom left radius in px
  44. };
  45. if (mTopLeftRadius > RADIUS_DEFAULT){
  46. corners[0] = mTopLeftRadius;
  47. corners[1] = mTopLeftRadius;
  48. }
  49. if (mTopRightRadius > RADIUS_DEFAULT){
  50. corners[2] = mTopRightRadius;
  51. corners[3] = mTopRightRadius;
  52. }
  53. if (mBottomRightRadius > RADIUS_DEFAULT){
  54. corners[4] = mBottomRightRadius;
  55. corners[5] = mBottomRightRadius;
  56. }
  57. if (mBottomLeftRadius > RADIUS_DEFAULT){
  58. corners[6] = mBottomLeftRadius;
  59. corners[7] = mBottomLeftRadius;
  60. }
  61. }
  62. @Override
  63. protected void onDraw(Canvas canvas) {
  64. RectF rect = new RectF(0, 0, getWidth(), getHeight());
  65. Path path = new Path();
  66. path.addRoundRect(rect, corners, Path.Direction.CW);
  67. canvas.clipPath(path);
  68. }
  69. }

自定义属性

  1. <declare-styleable name="CornerConstraintLayout">
  2. <attr name="android:radius" />
  3. <!-- Radius of the top left corner. -->
  4. <attr name="android:topLeftRadius" />
  5. <!-- Radius of the top right corner. -->
  6. <attr name="android:topRightRadius" />
  7. <!-- Radius of the bottom left corner. -->
  8. <attr name="android:bottomLeftRadius" />
  9. <!-- Radius of the bottom right corner. -->
  10. <attr name="android:bottomRightRadius" />
  11. </declare-styleable>

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/816450
推荐阅读
相关标签
  

闽ICP备14008679号