在做Android的項(xiàng)目的時(shí)候碰到一個(gè)在在代碼中動(dòng)態(tài)的給一個(gè)Group添加一個(gè)有些圓角的背景沒(méi)有用shape.xml文件來(lái)搞用的代碼,看了好一會(huì)了才明白R(shí)oundRectShape各個(gè)參數(shù)的意思,記錄下來(lái)省的以后再忘柔袁。先看官網(wǎng)的一個(gè)圖,表示了這個(gè)幾個(gè)類(lèi)之間的繼承關(guān)系
- RoundRectShape
float[] outerRadii = {20, 20, 30, 30, 40, 40, 50, 50};//外矩形 左上、右上异逐、右下捶索、左下的圓角半徑
RectF inset = new RectF(100, 100, 100, 100);//內(nèi)矩形距外矩形,左上角x,y距離灰瞻, 右下角x,y距離
float[] innerRadii = {20, 20, 20, 20, 20, 20, 20, 20};//內(nèi)矩形 圓角半徑
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)有三個(gè)參數(shù)腥例,第一個(gè)和第二個(gè)都是8個(gè)數(shù)字?jǐn)?shù)組,表示的的矩形的4個(gè)角的圓形半徑酝润,剛開(kāi)始就疑惑在這個(gè)8個(gè)數(shù)字上了,怎么也想不明白燎竖,測(cè)試了幾次弄懂了。 這8個(gè)數(shù)組分別從左上角開(kāi)始表示各個(gè)弧度的半徑要销,比如說(shuō)左上角 左上角有兩個(gè)邊組成底瓣,左邊和上邊,第一個(gè)數(shù)字表示的左邊這條邊最上面的半徑蕉陋,第二個(gè)表示上邊連接處圓形的半徑捐凭,從左上角,右上角凳鬓,右下角茁肠,左下角依次類(lèi)推正好八個(gè)數(shù)字。第一個(gè)參數(shù)表示的外邊角 第三個(gè)參數(shù)表示的內(nèi)邊角缩举,也就是大矩形套小矩形垦梆。 第二個(gè)參數(shù)表示的內(nèi)矩形的位置,距離大矩形左仅孩,上托猩,右,下的距離辽慕。 如果后面兩個(gè)參數(shù)都為null的話就只有一個(gè)大矩形京腥。結(jié)果如下:
- 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) 有兩個(gè)參數(shù),起始弧度溅蛉,需要跨越的弧度公浪,上面的例子中寫(xiě)的是負(fù)數(shù),則逆時(shí)針畫(huà)弧船侧,如果是正數(shù)欠气,則順時(shí)針畫(huà)弧. 如果是360度,則是一個(gè)圈镜撩,圓的半徑即大小你的ImageView本身來(lái)決定预柒。效果如下:
- 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);
畫(huà)一個(gè)橢圓,同樣橢圓的寬高由你的載體來(lái)決定,我這里是ImageView宜鸯,需要注意的是如果ImageView的寬和高相等就是一個(gè)圓人灼,效果如下: