2017-09-13 73 views
0

我在我的项目中使用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,以及如何中心应该是什么样子,与文本硬编码(我着色背景): XML

,这是它是如何结束了寻找 enter image description here

所以很明显,孩子们没有设定右击我应该怎么做? centerLayout.measure方法也应该自动测量孩子,对吗?

+0

您不从onDraw中的xml中绘制。到那个时候,所有的观点都应该已经被布置,测量并准备好绘制。你的问题是不理解或遵循Android框架的系统布局和绘制视图。 –

+0

我刚刚修改了PieChartRenderer中的方法,无论如何都做了很多测量。假设我将方法“测量”和“布局”移到各自的地方,这会改变什么吗?我认为结果是一样的,不是吗? –

+0

而不是修改图表PieChartRenderer,您可以使用relativelayout作为父级,并在饼图之间绘制自定义布局 – amarok

回答

0

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

int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(pieCenter.getWidth(), View.MeasureSpec.EXACTLY); 
int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(pieCenter.getHeight(), View.MeasureSpec.EXACTLY); 
相关问题