绘图用以下孩子一起延伸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方法中工作?

onDrawdrawChild之前调用,这意味着所有儿童的矩形区域,在这种情况下,你的背景后得出。

但是,这样做似乎有点过于复杂,为什么不在ConstantsLayout里面画一个视图来绘制正方形呢?

+0

我试着写super.onDraw在top和botton上。没有工作。 我尝试了使用和不使用setWillNotDraw。没有工作。 我必须实现一个自定义视图,这就是为什么使用这种策略。 –