绘图工作在onDrawForeground但不在onDraw中

问题描述 投票:0回答:1

我正在通过扩展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方法中工作?

android view ondraw android-constraintlayout custom-view
1个回答
0
投票

onDrawdrawChild之前被调用,这意味着所有的孩子都被绘制在矩形之后,在这种情况下是你的背景。

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

© www.soinside.com 2019 - 2024. All rights reserved.