Android中的Shape,RoundRectShape,ArcShape, OvalShape
在做Android的項目的時候碰到一個在在代碼中動態的給一個Group添加一個有些圓角的背景沒有用shape.xml文件來搞用的代碼,看了好一會了才明白RoundRectShape各個參數的意思,記錄下來省的以後再忘。先看官網的一個圖,表示了這個幾個類之間的繼承關系
1. RoundRectShape
float[] outerRadii = {20, 20, 30, 30, 40, 40, 50, 50};//外矩形 左上、右上、右下、左下的圓角半徑 RectF inset = new RectF(100, 100, 100, 100);//內矩形距外矩形,左上角x,y距離, 右下角x,y距離 float[] innerRadii = {20, 20, 20, 20, 20, 20, 20, 20};//內矩形 圓角半徑 RoundRectShape roundRectShape = new RoundRectShape(outerRadii, inset, innerRadii); ShapeDrawable drawable = new ShapeDrawable(roundRectShape); drawable.getPaint().setColor(Color.BLACK); drawable.getPaint().setAntiAlias(true); drawable.getPaint().setStyle(Paint.Style.STROKE);//描邊 mImage.setBackground(drawable);
代碼中RoundRectShape(float[] outerRadii, RectF inset,float[] innerRadii)有三個參數,第一個和第二個都是8個數字數組,表示的的矩形的4個角的圓形半徑,剛開始就疑惑在這個8個數字上了,怎麽也想不明白,測試了幾次弄懂了。 這8個數組分別從左上角開始表示各個弧度的半徑,比如說左上角 左上角有兩個邊組成,左邊和上邊,第一個數字表示的左邊這條邊最上面的半徑,第二個表示上邊連接處圓形的半徑,從左上角,右上角,右下角,左下角依次類推正好八個數字。第一個參數表示的外邊角 第三個參數表示的內邊角,也就是大矩形套小矩形。 第二個參數表示的內矩形的位置,距離大矩形左,上,右,下的距離。 如果後面兩個參數都為null的話就只有一個大矩形。結果如下:
2. ArcShape 繪制圓形或者扇形
ArcShape shape = new ArcShape(0, -300); ShapeDrawable drawable = new ShapeDrawable(shape); drawable.getPaint().setColor(Color.BLACK); drawable.getPaint().setAntiAlias(true); drawable.getPaint().setStyle(Paint.Style.STROKE); mImage.setBackground(drawable);
ArcShape(float startAngle, float sweepAngle) 有兩個參數,起始弧度,需要跨越的弧度,上面的例子中寫的是負數,則逆時針畫弧,如果是正數,則順時針畫弧. 如果是360度,則是一個圈,圓的半徑即大小你的ImageView本身來決定。效果如下:
3. OvalShape 橢圓
OvalShape ovalShape = new OvalShape(); ShapeDrawable drawable = new ShapeDrawable(ovalShape); drawable.getPaint().setColor(Color.BLACK); drawable.getPaint().setAntiAlias(true); drawable.getPaint().setStyle(Paint.Style.STROKE); mImage.setBackground(drawable);
畫一個橢圓,同樣橢圓的寬高由你的載體來決定,我這裏是ImageView,需要註意的是**如果ImageView的寬和高相等就是一個圓**,效果如下:
Android中的Shape,RoundRectShape,ArcShape, OvalShape