问题:在自定义控件时,绘制的背景总是遮住了控件中添加的View。具体绘制方法如下
@Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); paint.setColor(getResources().getColor(R.color.colorAccent)); canvas.drawCircle(bCircle, bCircle, bCircle, paint); }
解决办法:将super.dispatchDraw(canvas)换到绘制背景后面即可。具体如下
@Override protected void dispatchDraw(Canvas canvas) { paint.setColor(getResources().getColor(R.color.colorAccent)); canvas.drawCircle(bCircle, bCircle, bCircle, paint); super.dispatchDraw(canvas); }
为什么呢?因为dispatchDraw方法是用来绘制childen的,也就是说先使用super.dispatchDraw会先绘制View,再绘制背景就会遮住view了。
至于为什么在dispatchDraw方法中绘制,不在onDraw中绘制是因为这个自定义控件继承的ViewGroup,ViewGroup默认不执行onDraw方法。
如果一定要在onDraw中绘制背景,也可以设置
setWillNotDraw(false);那么就会执行到onDraw,就可以将绘制放入onDraw中。