• Android之布局转圆角


    Android之布局转圆角



    说明

    很多需求比较无语,需要某个布局转圆角,像个显眼包一样,所以为了满足显眼包,必须整呐
    
    • 1

    提示:以下是本篇文章正文内容,下面案例可供参考

    一、效果图

    说明:轮播图可以直接转圆角,图片也可以,我这里只是在轮播图外层嵌套了一个RoundRelativeLayout,直接对RoundRelativeLayout进行转角。
    在这里插入图片描述

    二、实现步骤

    1.自定义RoundRelativeLayout

    代码如下(示例):

    public class RoundRelativeLayout extends RelativeLayout {
        private final RectF roundRect = new RectF();
        private final Paint maskPaint = new Paint();
        private final Paint zonePaint = new Paint();
        private Context mContext;
        private float rect_adius = 20;  //圆角大小
    
    
        public RoundRelativeLayout(Context context) {
            super(context);
            init(context);
        }
    
        public RoundRelativeLayout(Context context, AttributeSet attrs) {
            super(context, attrs);
            init(context);
        }
    
        public RoundRelativeLayout(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
            init(context);
        }
    
    
        private void init(Context context) {
            this.mContext = context;
            maskPaint.setAntiAlias(true);
            maskPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
            zonePaint.setAntiAlias(true);
            zonePaint.setColor(Color.WHITE);
        }
    
    
        @Override
        protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
            super.onLayout(changed, left, top, right, bottom);
            int w = getWidth();
            int h = getHeight();
            roundRectSet(w, h);
        }
    
        @Override
        public void draw(Canvas canvas) {
            canvasSetLayer(canvas);
            super.draw(canvas);
            canvas.restore();
        }
    
    
        /**
         * 从新设置圆角
         *
         * @param adius
         */
        public void setRectAdius(float adius) {
            rect_adius = adius;
            invalidate();
        }
    
        /**
         * 圆角区域设置
         *
         * @param width
         * @param height
         */
        private void roundRectSet(int width, int height) {
            roundRect.set(0, 0, width, height);
        }
    
        /**
         * 画布区域裁剪
         *
         * @param canvas
         */
        private void canvasSetLayer(Canvas canvas) {
            canvas.saveLayer(roundRect, zonePaint, Canvas.ALL_SAVE_FLAG);
            canvas.drawRoundRect(roundRect, rect_adius, rect_adius, zonePaint);
            //
            canvas.saveLayer(roundRect, maskPaint, Canvas.ALL_SAVE_FLAG);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81

    2.使用

    说明:其实xml布局引用自定义这个就已经成功转角了,这里贴一下设置布局背景的代码,跟正常设置背景一样。

    relative_back.setBackgroundColor(Color.parseColor("#ffffff"))
    
    • 1

    总结

    其实就是自定义RoundRelativeLayout进行转角,角度可设置,很简单。

  • 相关阅读:
    探索AI视频生成新纪元:文生视频Sora VS RunwayML、Pika及StableVideo——谁将引领未来
    2022杭电多校七 Black Magic (签到)
    自然语言处理综述
    常见排序算法要点
    文件工具类
    【计算思维】少儿编程蓝桥杯青少组计算思维题考试真题及解析B
    rocketmq消费源码
    VueRouter学习日志
    C#定时任务框架Quartz.NET 简单Demo
    最新持续更新Crack:LightningChart 行业使用大全
  • 原文地址:https://blog.csdn.net/Android_Cll/article/details/132608940