如何在另一个View的draw()方法中从XML绘制布局?

时间:2017-09-13 16:16:07

标签: android xml canvas layout mpandroidchart

我在我的项目中使用MPAndroidChart并且我有一个PieChart。我需要在饼图的中心绘制一个布局,但我必须在饼图中绘制它,而不是在顶部。

所以我修改了PieChartRenderer中的drawCenterText(Canvas c)以从XML文件而不仅仅是文本中绘制整个布局。我的XML文件是带有自动调整TextViews的ConstraintLayout。 XML应该绘制在饼图的中心。

我在MainActivity中夸大了XML,并将其作为对PieChart的引用传递。

ViewGroup centerLayout = (ViewGroup) LayoutInflater.from(this).inflate(R.layout.center_text_layout, mPieChart, false);
mPieChart.setCenterLayout(centerLayout);

现在,当PieChart必须绘制自己时,它还应该将centerLayout绘制在其中心。方法drawCenterLayout(Canvas canvas)计算应该绘制centerLayout的位置。在绘图本身之前一切都很好。我不知道为什么不绘制centerLayout根(ConstraintLayout)的子节点。

这是应该从PieChart drawCenterLayout(Canvas canvas)方法绘制centerLayout的代码片段:

ViewGroup.LayoutParams params = centerLayout.getLayoutParams();
int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(params.width, View.MeasureSpec.EXACTLY);
int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(params.height, View.MeasureSpec.EXACTLY);

centerLayout.measure(widthMeasureSpec, heightMeasureSpec);
centerLayout.layout((int)boundingRect.left, (int)boundingRect.top, (int)boundingRect.right, (int)boundingRect.bottom);
centerLayout.draw(canvas);

canvas.restore();

这是我的XML以及中心的样子,文字硬编码(我为背景着色): XML

这就是最终看起来的样子 enter image description here

很明显孩子们没有正确......我该怎么办? centerLayout.measure方法还应该自动测量孩子,对吗?

1 个答案:

答案 0 :(得分:0)

问题在于测量方法。我必须提供适当的参数。

None