[Android]圆角布局

需求很无聊,就是给整个APP(的根ViewGroup)加上一个圆角背景,同时,内部控件也要响应这个圆角背景,意味着内部控件要么被裁剪,要么也拥有圆角。所以实现方式大致有两种:
(1)给ViewGroup加一个圆角背景,同时给处于四个角的子控件加上相应的圆角。
优点:一目了然

缺点:过于麻烦。

(2)裁剪ViewGroup的范围,得到一个圆角矩形。由于本质上所谓的UI就是在一张画布上绘图,当UI有变化的时候(包括输入法光标的闪动)就重绘画布,所以限定画布的范围为一个圆角矩形就行了。
优点:方便

缺点:画图麻烦,图案复杂就更麻烦了。

示例:

public class RoundLinearLayout extends LinearLayout {

	private RectF rect = new RectF();
	private Path path = new Path();
	private Paint mPaint = new Paint();

	public RoundLinearLayout(Context context, AttributeSet attrs) {
		super(context, attrs);
		setWillNotDraw(false);
	}

	@Override
	protected void onDraw(Canvas canvas) {
		rect.set(0, 0, getMeasuredWidth(), getMeasuredHeight());
		mPaint.setColor(Color.BLACK);
		canvas.drawRect(rect, mPaint);
		path.moveTo(0, 0);
		path.addRoundRect(rect, 40, 40, Direction.CW);
		path.close();
		canvas.clipPath(path);
		mPaint.setColor(Color.WHITE);
		canvas.drawRect(rect, mPaint);
		super.onDraw(canvas);
	}
}

显示效果:

注意事项:

ViewGroup的onDraw一般不执行,因此使用setWillNotDraw(false);可以处罚,同时给ViewGroup设置一个背景也行。


转载于:https://my.oschina.net/xesam/blog/156316

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值