绘图工作在onDrawForeground但不在onDraw中

时间:2017-10-14 15:10:04

标签: android view ondraw android-constraintlayout custom-view

我正在通过扩展ConstraintsLayout以及以下子项来开发自定义视图类(DatePicker):

  • 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方法中工作?

1 个答案:

答案 0 :(得分:0)

onDraw之前调用

drawChild,这意味着所有子项都是在矩形之后绘制的,在这种情况下,它是您的背景。

但这样做似乎有点过于复杂,为什么不在ConstrantsLayout中放置一个可以绘制正方形的视图呢?