安卓系统中快速便捷的实现圆角按钮方法详解

  

  

大家应该都知道,圆角按钮是我们在做界面时常常遇到的UI样式。通常的办法,是做一个可拉的,比如这样:

        & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   & lt;形状   xmlns: android=" http://schemas.android.com/apk/res/android "   android:形状=熬匦巍北?   & lt; !——填充的颜色——比;   & lt;固体android:颜色=" # ffae00”/比;      & lt; !——圆角的半径——比;   & lt;角落android:半径=" 10 dp/比;   & lt;/shape>      

在布局文件里按钮的背景属性设上这个可拉的。xml,就可以了。
  

  

然而这样做的话,每次弄个按钮都得新做一个可拉的文件,各种可拉的多了看着就乱。

  

是不是可以把颜色和半径放到按钮的属性里去,这样就不用每次再拖一个drawable.xml了是吧?

  

        & lt; widget.RoundCornerButton   android: id=癅 + id/btn_commit”   android: layout_width=" 100 dp”   android: layout_height=" 40 dp "   android:重力="中心"   android:文本="我的按钮”   应用:rcb_backgroundColor=" @color/黄”   应用:rcb_backgroundColorDisabled=" @color/light_grey”   应用:rcb_cornerRadius=" 20 dp”/在      

如果可以这样在布局文件里直接设置背景色和圆角半径,是不是很方便,虽然不如可拉的灵活,但是已经足以应付设计同学给出的圆角按钮的需求了。

  

我们就以定义自己的styleable属性开始吧

        & lt; declare-styleable name=" RoundCornerButton比;   & lt; attr name==把丈?皉cb_backgroundColor”格式比;   & lt; attr name==把丈?皉cb_backgroundColorDisabled”格式比;   & lt; attr=name=" rcb_cornerRadius "格式"维度"/比;   & lt;/declare-styleable>      

从可拉的扩展一个自己的可拉的,很简单

  
      <李>从构造方法传入颜色和半径,并创建一个实习的画笔;李   <李>覆写画方法,有现成的画圆角矩形的方法可以调用;李   <李>暴露一个setRect方法给外边,用于设置绘制区域的宽高。
      李   
        类RoundCornerDrawable延伸可拉的{      最后一个int颜色;   最后浮动半径;   最终油漆涂料;   最后RectF RectF;      RoundCornerDrawable (int颜色、浮动半径){   这一点。颜色=颜色;   这一点。半径=半径;//实心的画笔   这一点。涂=new ();   paint.setStyle (Paint.Style.FILL);   paint.setAntiAlias(真正的);   paint.setColor(颜色);      这一点。rectF=new rectF ();   }//用于设置可拉的宽高   公共空间setRect (int宽度,int高度){   this.rectF。左=0;   this.rectF。顶级=0;   this.rectF。正确的=宽度;   this.rectF。底=身高;   }      @Override   公共空画(@NonNull帆布画布){   画布。drawRoundRect (rectF,半径,半径、油漆);//画圆角矩形,现成的方法   }//其余方法略   }      

<强>定义自己的按钮类,有这么几个要点:

  
      <李>与通常的自定义观点一样,覆写三个构造方法;李   <李>从AttributeSet里读取自定义的属性写成backgroundColor和cornerRadius、这里暂时忽略backgroundColorDisabled;李   <李>每一种状态(例如普通,禁用,按下)是一个RoundCornerDrawable,组合成一个StateListDrawable;李   <李> onLayout的时候,记得改变每一个RoundCornerDrawable的尺寸。   
        公开课RoundCornerButton延伸AppCompatButton {      私人int colorNormal;   私人cornerRadius浮动;   私人RoundCornerDrawable bgDrawableNormal=零;//省略三个构造方法//构造方法最后一定要调用initCornerBackground完成初始化      私人空间initCornerBackground (AttributeSet attrs int defStyleAttr) {   TypedArray a=getContext ()。obtainStyledAttributes (attrs R.styleable。RoundCornerButton defStyleAttr 0);      这一点。cornerRadius=a.getDimension (R.styleable。RoundCornerButton_rcb_cornerRadius, 0);   这一点。colorNormal=a.getColor (R.styleable。RoundCornerButton_rcb_backgroundColor, 0);   makeBackgroundDrawable ();      a.recycle ();   }      私人空间makeBackgroundDrawable () {   bgDrawableNormal=new RoundCornerDrawable(这一点。colorNormal this.cornerRadius);   bgDrawableNormal.setRect (getWidth(),获得());//设计通常会给出禁用时的样式以及按下时的样式//所以这里用使用StateListDrawable   StateListDrawable bgDrawable=new StateListDrawable ();   bgDrawable。addState(新int [] {android.R.attr。state_enabled -android.R.attr。state_pressed}, bgDrawableNormal);//每多一种状态,在这里多加一项   setBackgroundDrawable (bgDrawable);   }      @Override   保护无效alt=" Android中快速便捷的实现圆角按钮方法详解“>

安卓系统中快速便捷的实现圆角按钮方法详解