android 圆形 布局,Android如何绘制圆形矩形和阴影布局

我创建了一个扩展LinearLayout的类

我想像这样显示一个Rect:

--------------------- => it is round corner

| border frame | .

| ----------------- | .

| | hearder | | .

| | - - - - - - - | | .

| | center | | .

| | | | .

| | - - - - - - - | | .

| | buttom | | .

| ---------------- | .

| | .

---------------------- .

. . . . . . . . . . . => it is shadow

我使用了paintShadow.setShadowLayer(this.radius,8,8,Color.GRAY);阴影不圆.

所以谁知道如何制作一个圆形的直角和阴影.

码:

@SuppressLint("DrawAllocation")

public class CornerLinearLayout extends LinearLayout{

public CornerLinearLayout(Context context,AttributeSet attr){

super(context,attr);

init();

}

public CornerLinearLayout(Context context) {

super(context);

init();

// TODO Auto-generated constructor stub

}

private static final int RADIUS=10;

private int frameColor;

private int radius;

private Path mClip;

private int frameWidth;

private int headerHeight;

private int buttomHeight;

private int headerColor;

private int buttomColor;

private int centerColor;

private void init() {

this.radius = RADIUS;

this.frameColor = 0xFFFFFFFF;

this.frameWidth = 4;

this.headerHeight = 50;

this.buttomHeight = 50;

headerColor = 0xFF31234A;

buttomColor = 0xFF9ACFFF;

centerColor = 0xFF55AACC;

this.setBackgroundColor(0);

// GradientDrawable gd = new GradientDrawable();

// gd.setStroke(frameWidth, frameColor);

// gd.setCornerRadius(radius);

// gd.setColor(0);

// //gd.setStroke(30, 0xFFFFFFFF);

//

// setBackgroundDrawable(gd);

this.setPadding(frameWidth, frameWidth, frameWidth,frameWidth);

// LinearLayout.LayoutParams params = (LayoutParams) this.getLayoutParams();

// params.setMargins(25, 10, 25, 10);

}

private Paint paintShadow = new Paint();

private Paint paint = new Paint();

public void onDraw(Canvas canvas){

super.onDraw(canvas);

RectF rf = new RectF(0,0,this.getWidth()-10,this.getHeight()-5);

paintShadow.setShadowLayer(this.radius, 8, 8, Color.GRAY);

rf.right -= 3;

rf.bottom -= 3;

paintShadow.setColor(this.frameColor);

paintShadow.setStrokeWidth(5);

canvas.drawRoundRect(rf,this.radius,this.radius, paintShadow);

paint.setStyle(Paint.Style.FILL);

// Rect r = new Rect(5,5,this.getWidth()-5,this.getHeight()-5);

if(this.centerColor != 0){

paint.setColor(this.centerColor);

// canvas.drawRect(r, paint);

rf.right -= 5;

rf.left += 5;

rf.top += 5;

rf.bottom -=5;

canvas.drawRoundRect(rf, this.radius, this.radius, paint);

}

// if(this.headerColor!=0){

// Rect rr = new Rect(10,10,this.getWidth()-5,this.headerHeight-10);

// paint.setColor(this.headerColor);

// canvas.drawRect(rr, paint);

// }

// if(this.buttomColor != 0){

// Rect rr = new Rect(10,this.getHeight()-this.buttomHeight,this.getWidth()-3,this.buttomHeight-3);

// paint.setColor(this.headerColor);

// canvas.drawRect(rr, paint);

// }

//

}

@Override

protected void onSizeChanged(int w, int h, int oldw, int oldh) {

super.onSizeChanged(w, h, oldw, oldh);

mClip = new Path();

RectF rect = new RectF(0, 0, w, h);

mClip.addRoundRect(rect, this.radius, this.radius, Direction.CW);

}

@Override

protected void dispatchDraw(Canvas canvas) {

canvas.save();

canvas.clipPath(mClip);

super.dispatchDraw(canvas);

canvas.restore();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值