绘图用以下孩子一起延伸ConstraintsLayout在onDrawForeground工作,但不是在onDraw有
问题描述:
我正在开发一个自定义视图类(的DatePicker):绘图用以下孩子一起延伸ConstraintsLayout在onDrawForeground工作,但不是在onDraw有
- 3 RecyclerViews
- 2按钮
我想在视图上画一个矩形,以便在DatePicker中显示选取的日期。我在onDraw方法中编写了以下代码:
LinearLayout parentContainer = findViewById(R.id.id_container_lists);
Paint paint = new Paint();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
paint.setColor(getResources().getColor(R.color.colorSelectedDate, getContext().getTheme()));
} else {
paint.setColor(getResources().getColor(R.color.colorSelectedDate));
}
paint.setAlpha(100);
Rect rect = new Rect(0, (parentContainer.getBottom() - parentContainer.getTop())/2 - 40, parentContainer.getRight(), (parentContainer.getBottom() - parentContainer.getTop())/2 + 100);
canvas.drawRect(rect, paint);
super.onDraw(canvas);
但是没有任何内容显示在视图上。我尝试了调试,并且onDraw内部的代码正在执行,但在执行后,我的自定义视图上没有绘制任何代码。
然后我试着重写onDrawForeground方法,并复制完全相同的代码在这个方法中,它的工作。 我的应用程序正在工作,但我只是想知道为什么它在onDraw函数中不起作用?我能做些什么来使它在onDraw方法中工作?
答
onDraw
是drawChild
之前调用,这意味着所有儿童的矩形区域,在这种情况下,你的背景后得出。
但是,这样做似乎有点过于复杂,为什么不在ConstantsLayout里面画一个视图来绘制正方形呢?
我试着写super.onDraw在top和botton上。没有工作。 我尝试了使用和不使用setWillNotDraw。没有工作。 我必须实现一个自定义视图,这就是为什么使用这种策略。 –