绘图工作在onDrawForeground但不在onDraw中
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了绘图工作在onDrawForeground但不在onDraw中相关的知识,希望对你有一定的参考价值。
我正在通过扩展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方法中工作?
答案
onDraw
在drawChild
之前被调用,这意味着所有的孩子都被绘制在矩形之后,在这种情况下是你的背景。
但是这样做似乎有点过于复杂,为什么不在ConstrantsLayout中放置一个视图来绘制正方形呢?
以上是关于绘图工作在onDrawForeground但不在onDraw中的主要内容,如果未能解决你的问题,请参考以下文章
Seaborn Facet Grid 'col=' 不在 Jupyter Notebook 中并排创建绘图
MFC开发绘图程序时,工作窗口坐标系是怎么样的,坐标原点在哪里