From 64f6ab0a4106cd7cf217442ba29ae3624861a7ef Mon Sep 17 00:00:00 2001 From: Philipp Jahoda Date: Wed, 25 Mar 2015 21:28:41 +0100 Subject: [PATCH] Fixed issue concerning PieChart center text (issue #467). --- .../mpchartexample/PieChartActivity.java | 2 +- .../fragments/PieChartFrag.java | 15 +++++----- .../fragments/SimpleFragment.java | 4 +++ .../notimportant/MainActivity.java | 2 +- .../charting/renderer/PieChartRenderer.java | 30 ++++++++++++------- 5 files changed, 32 insertions(+), 21 deletions(-) diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/PieChartActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/PieChartActivity.java index fa8c91483c..2f7ab1170f 100644 --- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/PieChartActivity.java +++ b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/PieChartActivity.java @@ -84,7 +84,7 @@ protected void onCreate(Bundle savedInstanceState) { mChart.setOnChartValueSelectedListener(this); // mChart.setTouchEnabled(false); - mChart.setCenterText("MPAndroidChart\nLibrary"); + mChart.setCenterText("MPAndroidChart\nby Philipp Jahoda"); setData(3, 100); diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/PieChartFrag.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/PieChartFrag.java index 851351b1c4..b06ab32b84 100644 --- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/PieChartFrag.java +++ b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/PieChartFrag.java @@ -27,23 +27,22 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa mChart = (PieChart) v.findViewById(R.id.pieChart1); mChart.setDescription(""); - mChart.setCenterTextTypeface(Typeface.createFromAsset(getActivity().getAssets(), "OpenSans-Light.ttf")); - mChart.setCenterText("Quarterly\nRevenue"); + Typeface tf = Typeface.createFromAsset(getActivity().getAssets(), "OpenSans-Light.ttf"); + + mChart.setCenterTextTypeface(tf); + mChart.setCenterText("Revenues"); mChart.setCenterTextSize(22f); + mChart.setCenterTextTypeface(tf); // radius of the center hole in percent of maximum radius mChart.setHoleRadius(45f); mChart.setTransparentCircleRadius(50f); - // enable / disable drawing of x- and y-values -// mChart.setDrawYValues(false); -// mChart.setDrawXValues(false); - - mChart.setData(generatePieData()); - Legend l = mChart.getLegend(); l.setPosition(LegendPosition.RIGHT_OF_CHART); + mChart.setData(generatePieData()); + return v; } } diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/SimpleFragment.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/SimpleFragment.java index 4f12b62770..ce9a49b719 100644 --- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/SimpleFragment.java +++ b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/fragments/SimpleFragment.java @@ -1,5 +1,6 @@ package com.xxmassdeveloper.mpchartexample.fragments; +import android.graphics.Color; import android.graphics.Typeface; import android.os.Bundle; import android.support.v4.app.Fragment; @@ -115,9 +116,12 @@ protected PieData generatePieData() { PieDataSet ds1 = new PieDataSet(entries1, "Quarterly Revenues 2014"); ds1.setColors(ColorTemplate.VORDIPLOM_COLORS); ds1.setSliceSpace(2f); + ds1.setValueTextColor(Color.WHITE); + ds1.setValueTextSize(12f); PieData d = new PieData(xVals, ds1); d.setValueTypeface(tf); + return d; } diff --git a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/notimportant/MainActivity.java b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/notimportant/MainActivity.java index 151ad2700b..eedb521a43 100644 --- a/MPChartExample/src/com/xxmassdeveloper/mpchartexample/notimportant/MainActivity.java +++ b/MPChartExample/src/com/xxmassdeveloper/mpchartexample/notimportant/MainActivity.java @@ -83,7 +83,7 @@ protected void onCreate(Bundle savedInstanceState) { objects.add(new ContentItem("Draw Chart", "Demonstration of drawing values into the chart per touch-gesture. With callbacks.")); objects.add(new ContentItem( - "Charts in Fragments, awesome design.", + "Charts in ViewPager Fragments", "Demonstration of charts inside ViewPager Fragments. In this example the focus was on the design and look and feel of the chart.")); objects.add(new ContentItem( "BarChart inside ListView", diff --git a/MPChartLib/src/com/github/mikephil/charting/renderer/PieChartRenderer.java b/MPChartLib/src/com/github/mikephil/charting/renderer/PieChartRenderer.java index 953acfb51e..db3091d8c9 100644 --- a/MPChartLib/src/com/github/mikephil/charting/renderer/PieChartRenderer.java +++ b/MPChartLib/src/com/github/mikephil/charting/renderer/PieChartRenderer.java @@ -35,7 +35,7 @@ public class PieChartRenderer extends DataRenderer { * chart */ private Paint mCenterTextPaint; - + /** Bitmap for drawing the center hole */ protected Bitmap mDrawBitmap; @@ -66,16 +66,16 @@ public Paint getPaintHole() { public Paint getPaintCenterText() { return mCenterTextPaint; } - + @Override public void initBuffers() { // TODO Auto-generated method stub - + } @Override public void drawData(Canvas c) { - + if (mDrawBitmap == null) { mDrawBitmap = Bitmap.createBitmap((int) mViewPortHandler.getChartWidth(), (int) mViewPortHandler.getChartHeight(), Bitmap.Config.ARGB_4444); @@ -91,7 +91,7 @@ public void drawData(Canvas c) { if (set.isVisible()) drawDataSet(c, set); } - + c.drawBitmap(mDrawBitmap, 0, 0, mRenderPaint); } @@ -275,11 +275,18 @@ protected void drawCenterText(Canvas c) { // get all lines from the text String[] lines = centerText.split("\n"); - // calculate the height for each line - float lineHeight = Utils.calcTextHeight(mCenterTextPaint, lines[0]); - float linespacing = lineHeight * 0.2f; + float maxlineheight = 0f; + + // calc the maximum line height + for (String line : lines) { + float curHeight = Utils.calcTextHeight(mCenterTextPaint, line); + if (curHeight > maxlineheight) + maxlineheight = curHeight; + } + + float linespacing = maxlineheight * 0.25f; - float totalheight = lineHeight * lines.length - linespacing * (lines.length - 1); + float totalheight = maxlineheight * lines.length - linespacing * (lines.length - 1); int cnt = lines.length; @@ -290,7 +297,7 @@ protected void drawCenterText(Canvas c) { String line = lines[lines.length - i - 1]; c.drawText(line, center.x, y - + lineHeight * cnt - totalheight / 2f, + + maxlineheight * cnt - totalheight / 2f, mCenterTextPaint); cnt--; y -= linespacing; @@ -348,7 +355,8 @@ public void drawHighlighted(Canvas c, Highlight[] indices) { // redefine the rect that contains the arc so that the // highlighted pie is not cut off - mBitmapCanvas.drawArc(highlighted, angle + set.getSliceSpace() / 2f, sliceDegrees * mAnimator.getPhaseY() + mBitmapCanvas.drawArc(highlighted, angle + set.getSliceSpace() / 2f, sliceDegrees + * mAnimator.getPhaseY() - set.getSliceSpace() / 2f, true, mRenderPaint); } }