【问题标题】:Drawing working in onDrawForeground but not in onDraw绘图工作在 onDrawForeground 但不在 onDraw
【发布时间】:2017-10-14 15:10:03
【问题描述】:

我正在通过扩展 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】:

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

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

    【讨论】:

    • 我尝试在顶部和底部编写 super.onDraw。没用。我尝试了使用和不使用 setWillNotDraw。没用。我必须实现一个自定义视图,这就是使用此策略的原因。
    猜你喜欢
    • 2014-07-21
    • 1970-01-01
    • 2014-05-30
    • 2013-09-07
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多