美文网首页
ShapeHelper圆角工具类

ShapeHelper圆角工具类

作者: 薇薇浆糊 | 来源:发表于2020-05-13 15:27 被阅读0次

一直觉得频繁的手写xml的圆角工具类太复杂,所以自己抽空撸了一个小工具;

主要是自己比较懒,不想写那么多shape.xml文件,而且项目大了,各种文件看的眼花缭乱,就像这样

难搞哦

于是,自己还是手撸一个吧,说白了就是纯Java写drawable,然后利用view.setBackground(Drawable drawable),view.setForeground(Drawable drawable)方法展示

为了方便,也只打算写一个类,那就单例模式吧

private volatile static ShapeHelper instance = null;private ShapeHelper() {}public static ShapeHelper getInstance() { if (instance == null) { synchronized (ShapeHelper.class) { if (instance == null) { instance = new ShapeHelper(); } } } return instance;}

好了,先想一下需要的效果,常用的几种情况

1.纯底色和渐变底色,2带边框和不带边框,3.边框圆角,部分圆角,不是圆角

先补充下知识点

GradientDrawable drawable =new GradientDrawable();

drawable.setCornerRadius(radius);//设置圆角

drawable.setGradientType(gradientType);//设置渐变方式{RECTANGLE, OVAL, LINE, RING}

//drawable.setOrientation(orientation);//设置渐变的方向{TOP_BOTTOM,TR_BL,RIGHT_LEFT,BR_TL,BOTTOM_TOP,BL_TR,LEFT_RIGHT,TL_BR}

drawable.setColors(backgroundColor);//设置背景色

drawable.setStroke(strokeWidth, strokeColor);//设置边框和边框颜色

drawable.setStroke(strokeWidth, strokeColor, dashWidth, dashGap);//设置边框和边框颜色 虚线边框虚线的间距

所以有了这个类

另外,为了方便做点击和选中的状态,新增了方法

public StateListDrawable createStateListDrawable(Drawable downPressed,Drawable upPressed,boolean checkeOrPress) { //动态生成Selector int pressed = android.R.attr.state_pressed; //取负值就表示pressed为false的意思 if (checkeOrPress){ pressed=android.R.attr.state_checked;//选中状态 } StateListDrawable drawable = new StateListDrawable(); drawable.addState(new int[]{pressed}, downPressed);// 状态 , 设置按下的图片 drawable.addState(new int[]{-pressed}, upPressed);//默认状态,默认状态下的图片 return drawable;}

完整代码如下

import android.graphics.drawable.Drawable;

import android.graphics.drawable.GradientDrawable;

import android.graphics.drawable.StateListDrawable;

import android.support.annotation.ColorInt;

public class ShapeHelper{

    //填充  纯色  或  渐变色(2)

    //边框  虚线,实线,无(3)

    //圆角  (1)

    //设置到View中view.setBackgroundDrawable(drawable);

    private volatile static ShapeHelperinstance =null;

    private ShapeHelper(){

}

    public static ShapeHelpergetInstance(){

        if (instance ==null){

            synchronized (ShapeHelper.class){

                if (instance ==null){

                    instance =new ShapeHelper();

                }

}

}

        return instance;

    }

//        GradientDrawable drawable = new GradientDrawable();

//        //基础设置-----------

//        //设置圆角大小float radius

//        drawable.setCornerRadius();

//

//        //边框部分设置------------

//        //实线:int strokeWidth,int strokeColor

//        //虚线:int strokeWidth,int strokeColor,float dashWidth, float dashGap

//        drawable.setStroke();

//

//        //填充设置----------

//

//        //纯色填充int backgroundColor

//        drawable.setColor();

//

//        //渐变色填充

//        //设置渐变形状,包括RECTANT,OVAL,LINE,RING

//        drawable.setGradientType(GradientDrawable.RECTANGLE);

//        //设置渐变方向

//        drawable.setOrientation(GradientDrawable.Orientation.LEFT_RIGHT);

//        //设置渐变颜色

//        drawable.setColors();

    //无边框/圆角/单色

    public GradientDrawablecreateSingleDrawableNoBorder(float radius,

                                                        @ColorInt int backgroundColor){

        GradientDrawable drawable =new GradientDrawable();

        drawable.setCornerRadius(radius);

        drawable.setColor(backgroundColor);

        return drawable;

    }

    //无边框/圆角/渐变色/渐变形状{RECTANGLE, OVAL, LINE, RING}

    //渐变方向{ TOP_BOTTOM,TR_BL,RIGHT_LEFT,BR_TL,BOTTOM_TOP,BL_TR,LEFT_RIGHT,TL_BR}

    public GradientDrawablecreateMixDrawableNoBorder(float radius,

                                                      @ColorInt int[]backgroundColor,

                                                      int gradientType,

                                                      GradientDrawable.Orientationorientation){

        GradientDrawable drawable =new GradientDrawable();

        drawable.setCornerRadius(radius);

        drawable.setGradientType(gradientType);

        drawable.setOrientation(orientation);

        drawable.setColors(backgroundColor);

        return drawable;

    }

    //实线/圆角/单色/

    public GradientDrawablecreateSingleDrawableFillBorder(float radius,

                                                          int strokeWidth,

                                                          int strokeColor,

                                                          @ColorInt int backgroundColor){

        GradientDrawable drawable =new GradientDrawable();

        drawable.setCornerRadius(radius);

        drawable.setStroke(strokeWidth, strokeColor);

        drawable.setColor(backgroundColor);

        return drawable;

    }

    //实线/圆角/渐变色/渐变形状{RECTANGLE, OVAL, LINE, RING}

    //渐变方向{ TOP_BOTTOM,TR_BL,RIGHT_LEFT,BR_TL,BOTTOM_TOP,BL_TR,LEFT_RIGHT,TL_BR}

    public GradientDrawablecreateMixDrawableFillBorder(float radius,

                                                        int strokeWidth,

                                                        int strokeColor,

                                                        @ColorInt int[]backgroundColor,

                                                        int gradientType,

                                                        GradientDrawable.Orientationorientation){

        GradientDrawable drawable =new GradientDrawable();

        drawable.setCornerRadius(radius);

        drawable.setStroke(strokeWidth, strokeColor);

        drawable.setGradientType(gradientType);

        drawable.setOrientation(orientation);

        drawable.setColors(backgroundColor);

        return drawable;

    }

    //虚线/圆角/单色/

    public GradientDrawablecreateSingleDrawableDashBorder(float radius,

                                                          int strokeWidth,

                                                          int strokeColor,

                                                          float dashWidth,

                                                          float dashGap,

                                                          @ColorInt int backgroundColor){

        GradientDrawable drawable =new GradientDrawable();

        drawable.setCornerRadius(radius);

        drawable.setStroke(strokeWidth, strokeColor, dashWidth, dashGap);

        drawable.setColor(backgroundColor);

        return drawable;

    }

    //虚线/圆角/渐变色/渐变形状{RECTANGLE, OVAL, LINE, RING}

    //渐变方向{ TOP_BOTTOM,TR_BL,RIGHT_LEFT,BR_TL,BOTTOM_TOP,BL_TR,LEFT_RIGHT,TL_BR}

    public GradientDrawablecreateMixDrawableDashBorder(float radius,

                                                        int strokeWidth,

                                                        int strokeColor,

                                                        float dashWidth,

                                                        float dashGap,

                                                        @ColorInt  int[]backgroundColor,

                                                        int gradientType,

                                                        GradientDrawable.Orientationorientation){

        GradientDrawable drawable =new GradientDrawable();

        drawable.setCornerRadius(radius);

        drawable.setStroke(strokeWidth, strokeColor, dashWidth, dashGap);

        drawable.setGradientType(gradientType);

        drawable.setOrientation(orientation);

        drawable.setColors(backgroundColor);

        return drawable;

    }

    //实线/圆角/渐变色/渐变形状{RECTANGLE}

    //渐变方向{LEFT_RIGHT}

    public GradientDrawablecreateNomalMixDrawableFillBorder(float radius,

                                                            int strokeWidth,

                                                            int strokeColor,

                                                            @ColorInt  int[]backgroundColor){

        GradientDrawable drawable =new GradientDrawable();

        drawable.setCornerRadius(radius);

        drawable.setStroke(strokeWidth, strokeColor);

        drawable.setGradientType(GradientDrawable.RECTANGLE);

        drawable.setOrientation(GradientDrawable.Orientation.LEFT_RIGHT);

        drawable.setColors(backgroundColor);

        return drawable;

    }

    public GradientDrawablecreateDrawable(float topLeftRadius,

                                          float topRightRadius,

                                          float bottomRightRadius,

                                          float bottomLeftRadius,

                                          int strokeWidth,

                                          int strokeColor,

                                          float dashWidth,

                                          float dashGap,

                                          int gradientType,

                                          GradientDrawable.Orientationorientation,

                                          @ColorInt  int...backgroundColor){

        GradientDrawable drawable =new GradientDrawable();

        drawable.setCornerRadii(new float[]{topLeftRadius, topLeftRadius, topRightRadius, topRightRadius, bottomRightRadius, bottomRightRadius, bottomLeftRadius, bottomLeftRadius});

        if (strokeWidth >=0){

            if (dashWidth <=0 ||dashGap <=0){

                drawable.setStroke(strokeWidth, strokeColor);

            } else {

                drawable.setStroke(strokeWidth, strokeColor, dashWidth, dashGap);

            }

}

        if (-1!=gradientType)

drawable.setGradientType(gradientType);

        if (null!=orientation)

drawable.setOrientation(orientation);

        if (backgroundColor.length==1){

            drawable.setColor(backgroundColor[0]);

        }else {

            drawable.setColors(backgroundColor);

        }

        return drawable;

    }

    public StateListDrawablecreateStateListDrawable(DrawabledownPressed,DrawableupPressed,boolean checkeOrPress){

        //动态生成Selector

        int pressed = android.R.attr.state_pressed; //取负值就表示pressed为false的意思

        if (checkeOrPress){

            pressed=android.R.attr.state_checked;//选中状态

        }

        StateListDrawable drawable =new StateListDrawable();

        drawable.addState(new int[]{pressed}, downPressed);//  状态  , 设置按下的图片

        drawable.addState(new int[]{-pressed}, upPressed);//默认状态,默认状态下的图片

        return drawable;

    }

}

工具使用

rbLeft.setBackground(ShapeHelper.getInstance().createStateListDrawable(

ShapeHelper.getInstance().createDrawable(DisplayUtil.dp2Px(5), 0, 0, DisplayUtil.dp2Px(5),

                -1, -1, -1, -1, GradientDrawable.RECTANGLE, null, 0xFFFFF0F0),

        ShapeHelper.getInstance().createDrawable(DisplayUtil.dp2Px(5), 0, 0, DisplayUtil.dp2Px(5),

                -1, -1, -1, -1, GradientDrawable.RECTANGLE, null, 0xFFFFFFFF)

, true));

rbRight.setBackground(ShapeHelper.getInstance().createStateListDrawable(

ShapeHelper.getInstance().createDrawable(0, DisplayUtil.dp2Px(5), DisplayUtil.dp2Px(5), 0,

                -1, -1, -1, -1, GradientDrawable.RECTANGLE, null, 0xFFFFF0F0),

        ShapeHelper.getInstance().createDrawable(0, DisplayUtil.dp2Px(5), DisplayUtil.dp2Px(5), 0,

                -1, -1, -1, -1, GradientDrawable.RECTANGLE, null, 0xFFFFFFFF)

, true));

相关文章

  • ShapeHelper圆角工具类

    一直觉得频繁的手写xml的圆角工具类太复杂,所以自己抽空撸了一个小工具; 主要是自己比较懒,不想写那么多shape...

  • android 圆角头像工具类

    看看相关文章, [支持圆形、圆角矩形、带边框的自定View]:https://github.com/msandro...

  • Android 封装AlertDialog工具类 自定义宽度、圆

    AlertDialog 改变宽高、圆角核心方法 封装工具类 all code 在使用到的地方调用 Page on...

  • 工具类(为控件设置圆角) - iOS

    为了便于日常开发效率,因此创建了一些小的工具类便于使用.具体 code 如下:声明: 实现: 以上便是此次分享的内...

  • 自定义圆角、圆形图片

    支持圆形、圆角(默认4边圆角,支持自定义各个圆角radius)图片。先建个类RoundImg继承AppCompat...

  • 零基础学Ai|玩转圆角矩形

    文/逆风飞翔的猫 【工具】 今天我们要学习的是圆角矩形工具的使用方法 【快捷键】 圆角矩形工具没有单独的快捷键,在...

  • iOS图片圆角优化(一)

    关于图片圆角的,用到了大量圆角图片。然而,系统圆角会导致离屏渲染的问题,出于性能考虑,于是有了图片圆角渲染工具HJ...

  • 【PS教程】拟物化空调制作方法

    1.新建文档,800*600像素,做出渐变背景。 2.用圆角矩形工具画一个圆角矩形,650X200像素,圆角角度上...

  • glide加载圆角图片内存抖动

    用了一个网络上的圆角图片加载的工具加载圆角,事实上证明这种方式很坑。 /** glide Round corner...

  • 2、CAD编辑工具

    f圆角工具, r可设置圆角半径 , 按住shift不放点两线段,可直接连接闭合 缩放sc,分式输入 :新值 /旧值...

网友评论

      本文标题:ShapeHelper圆角工具类

      本文链接:https://www.haomeiwen.com/subject/painnhtx.html