我在我的项目中使用MPAndroidChart,我有一个PieChart。我需要在饼图的中心绘制布局,但我必须将它绘制在饼图本身中,而不是放在顶部。如何在另一个视图的draw()方法中从XML中绘制布局?
所以我修改了从XML文件而不是文本中绘制整个布局。我的XML文件是带有autosize 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)的孩子没有绘制。
这一块应该吸取centerLayout的代码,从饼图drawCenterLayout(Canvas canvas)
方法:
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,以及如何中心应该是什么样子,与文本硬编码(我着色背景):
所以很明显,孩子们没有设定右击我应该怎么做? centerLayout.measure
方法也应该自动测量孩子,对吗?
您不从onDraw中的xml中绘制。到那个时候,所有的观点都应该已经被布置,测量并准备好绘制。你的问题是不理解或遵循Android框架的系统布局和绘制视图。 –
我刚刚修改了PieChartRenderer中的方法,无论如何都做了很多测量。假设我将方法“测量”和“布局”移到各自的地方,这会改变什么吗?我认为结果是一样的,不是吗? –
而不是修改图表PieChartRenderer,您可以使用relativelayout作为父级,并在饼图之间绘制自定义布局 – amarok