X Tutup
Skip to content

Commit 3b0be74

Browse files
committed
Add example for half-piechart
1 parent b5bfc3e commit 3b0be74

File tree

6 files changed

+183
-4
lines changed

6 files changed

+183
-4
lines changed

MPChartExample/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@
6565
<activity android:name=".realm.RealmWikiExample"></activity>
6666
<activity android:name=".BarChartPositiveNegative"></activity>
6767
<activity android:name=".FilledLineActivity"></activity>
68+
<activity android:name=".HalfPieChartActivity"></activity>
6869
</application>
6970

7071
</manifest>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:layout_width="match_parent"
4+
android:layout_height="match_parent" >
5+
6+
<com.github.mikephil.charting.charts.PieChart
7+
android:id="@+id/chart1"
8+
android:layout_width="match_parent"
9+
android:layout_height="match_parent" />
10+
11+
</RelativeLayout>
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
2+
package com.xxmassdeveloper.mpchartexample;
3+
4+
import android.graphics.Color;
5+
import android.graphics.Point;
6+
import android.graphics.Typeface;
7+
import android.os.Bundle;
8+
import android.text.SpannableString;
9+
import android.text.style.ForegroundColorSpan;
10+
import android.text.style.RelativeSizeSpan;
11+
import android.text.style.StyleSpan;
12+
import android.view.Display;
13+
import android.view.WindowManager;
14+
import android.widget.RelativeLayout;
15+
16+
import com.github.mikephil.charting.animation.Easing;
17+
import com.github.mikephil.charting.charts.PieChart;
18+
import com.github.mikephil.charting.components.Legend;
19+
import com.github.mikephil.charting.components.Legend.LegendPosition;
20+
import com.github.mikephil.charting.data.PieData;
21+
import com.github.mikephil.charting.data.PieDataSet;
22+
import com.github.mikephil.charting.data.PieEntry;
23+
import com.github.mikephil.charting.formatter.PercentFormatter;
24+
import com.github.mikephil.charting.utils.ColorTemplate;
25+
import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
26+
27+
import java.util.ArrayList;
28+
29+
public class HalfPieChartActivity extends DemoBase {
30+
31+
private PieChart mChart;
32+
33+
@Override
34+
protected void onCreate(Bundle savedInstanceState) {
35+
super.onCreate(savedInstanceState);
36+
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
37+
WindowManager.LayoutParams.FLAG_FULLSCREEN);
38+
setContentView(R.layout.activity_piechart_half);
39+
40+
mChart = (PieChart) findViewById(R.id.chart1);
41+
mChart.setBackgroundColor(Color.WHITE);
42+
43+
moveOffScreen();
44+
45+
mChart.setUsePercentValues(true);
46+
mChart.setDescription("");
47+
48+
mChart.setCenterTextTypeface(mTfLight);
49+
mChart.setCenterText(generateCenterSpannableText());
50+
51+
mChart.setDrawHoleEnabled(true);
52+
mChart.setHoleColor(Color.WHITE);
53+
54+
mChart.setTransparentCircleColor(Color.WHITE);
55+
mChart.setTransparentCircleAlpha(110);
56+
57+
mChart.setHoleRadius(58f);
58+
mChart.setTransparentCircleRadius(61f);
59+
60+
mChart.setDrawCenterText(true);
61+
62+
mChart.setRotationEnabled(false);
63+
mChart.setHighlightPerTapEnabled(true);
64+
65+
mChart.setMaxAngle(180f); // HALF CHART
66+
mChart.setRotationAngle(180f);
67+
mChart.setCenterTextOffset(0, -20);
68+
69+
setData(4, 100);
70+
71+
mChart.animateY(1400, Easing.EasingOption.EaseInOutQuad);
72+
73+
Legend l = mChart.getLegend();
74+
l.setPosition(LegendPosition.ABOVE_CHART_CENTER);
75+
l.setXEntrySpace(7f);
76+
l.setYEntrySpace(0f);
77+
l.setYOffset(0f);
78+
79+
// entry label styling
80+
mChart.setEntryLabelColor(Color.WHITE);
81+
mChart.setEntryLabelTypeface(mTfRegular);
82+
mChart.setEntryLabelTextSize(12f);
83+
}
84+
85+
private void setData(int count, float range) {
86+
87+
ArrayList<PieEntry> values = new ArrayList<PieEntry>();
88+
89+
for (int i = 0; i < count; i++) {
90+
values.add(new PieEntry((float) ((Math.random() * range) + range / 5), mParties[i % mParties.length]));
91+
}
92+
93+
PieDataSet dataSet = new PieDataSet(values, "Election Results");
94+
dataSet.setSliceSpace(3f);
95+
dataSet.setSelectionShift(5f);
96+
97+
dataSet.setColors(ColorTemplate.MATERIAL_COLORS);
98+
//dataSet.setSelectionShift(0f);
99+
100+
PieData data = new PieData(dataSet);
101+
data.setValueFormatter(new PercentFormatter());
102+
data.setValueTextSize(11f);
103+
data.setValueTextColor(Color.WHITE);
104+
data.setValueTypeface(mTfLight);
105+
mChart.setData(data);
106+
107+
mChart.invalidate();
108+
}
109+
110+
private SpannableString generateCenterSpannableText() {
111+
112+
SpannableString s = new SpannableString("MPAndroidChart\ndeveloped by Philipp Jahoda");
113+
s.setSpan(new RelativeSizeSpan(1.7f), 0, 14, 0);
114+
s.setSpan(new StyleSpan(Typeface.NORMAL), 14, s.length() - 15, 0);
115+
s.setSpan(new ForegroundColorSpan(Color.GRAY), 14, s.length() - 15, 0);
116+
s.setSpan(new RelativeSizeSpan(.8f), 14, s.length() - 15, 0);
117+
s.setSpan(new StyleSpan(Typeface.ITALIC), s.length() - 14, s.length(), 0);
118+
s.setSpan(new ForegroundColorSpan(ColorTemplate.getHoloBlue()), s.length() - 14, s.length(), 0);
119+
return s;
120+
}
121+
122+
private void moveOffScreen() {
123+
124+
Display display = getWindowManager().getDefaultDisplay();
125+
int height = display.getHeight(); // deprecated
126+
127+
int offset = (int)(height * 0.65); /* or whatever */
128+
129+
RelativeLayout.LayoutParams rlParams =
130+
(RelativeLayout.LayoutParams)mChart.getLayoutParams();
131+
rlParams.setMargins(0, 0, 0, -offset);
132+
mChart.setLayoutParams(rlParams);
133+
}
134+
}

MPChartExample/src/com/xxmassdeveloper/mpchartexample/notimportant/MainActivity.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.xxmassdeveloper.mpchartexample.CubicLineChartActivity;
2626
import com.xxmassdeveloper.mpchartexample.DynamicalAddingActivity;
2727
import com.xxmassdeveloper.mpchartexample.FilledLineActivity;
28+
import com.xxmassdeveloper.mpchartexample.HalfPieChartActivity;
2829
import com.xxmassdeveloper.mpchartexample.HorizontalBarChartActivity;
2930
import com.xxmassdeveloper.mpchartexample.InvertedLineChartActivity;
3031
import com.xxmassdeveloper.mpchartexample.LineChartActivity1;
@@ -143,6 +144,9 @@ protected void onCreate(Bundle savedInstanceState) {
143144
objects.add(new ContentItem(
144145
"Filled LineChart",
145146
"This demonstrates how to fill an area between two LineDataSets."));
147+
objects.add(new ContentItem(
148+
"Half PieChart",
149+
"This demonstrates how to create a 180 degree PieChart."));
146150

147151
MyAdapter adapter = new MyAdapter(this, objects);
148152

@@ -282,6 +286,10 @@ public void onItemClick(AdapterView<?> av, View v, int pos, long arg3) {
282286
i = new Intent(this, FilledLineActivity.class);
283287
startActivity(i);
284288
break;
289+
case 31:
290+
i = new Intent(this, HalfPieChartActivity.class);
291+
startActivity(i);
292+
break;
285293

286294
}
287295

MPChartLib/src/main/java/com/github/mikephil/charting/charts/PieChart.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,8 @@ public class PieChart extends PieRadarChartBase<PieData> {
7272
*/
7373
private CharSequence mCenterText = "";
7474

75+
private PointF mCenterTextOffset = new PointF(0, 0);
76+
7577
/**
7678
* indicates the size of the hole in the center of the piechart, default:
7779
* radius / 2
@@ -489,6 +491,25 @@ public void setCenterTextSizePixels(float sizePixels) {
489491
((PieChartRenderer) mRenderer).getPaintCenterText().setTextSize(sizePixels);
490492
}
491493

494+
/**
495+
* Sets the offset the center text should have from it's original position in dp. Default x = 0, y = 0
496+
*
497+
* @param x
498+
* @param y
499+
*/
500+
public void setCenterTextOffset(float x, float y) {
501+
mCenterTextOffset = new PointF(Utils.convertDpToPixel(x), Utils.convertDpToPixel(y));
502+
}
503+
504+
/**
505+
* Returns the offset on the x- and y-axis the center text has in dp.
506+
*
507+
* @return
508+
*/
509+
public PointF getCenterTextOffset() {
510+
return mCenterTextOffset;
511+
}
512+
492513
/**
493514
* Sets the color of the center text of the PieChart.
494515
*

MPChartLib/src/main/java/com/github/mikephil/charting/renderer/PieChartRenderer.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -656,16 +656,20 @@ protected void drawCenterText(Canvas c) {
656656
if (mChart.isDrawCenterTextEnabled() && centerText != null) {
657657

658658
PointF center = mChart.getCenterCircleBox();
659+
PointF offset = mChart.getCenterTextOffset();
660+
661+
float x = center.x + offset.x;
662+
float y = center.y + offset.y;
659663

660664
float innerRadius = mChart.isDrawHoleEnabled() && !mChart.isDrawSlicesUnderHoleEnabled()
661665
? mChart.getRadius() * (mChart.getHoleRadius() / 100f)
662666
: mChart.getRadius();
663667

664668
RectF holeRect = mRectBuffer[0];
665-
holeRect.left = center.x - innerRadius;
666-
holeRect.top = center.y - innerRadius;
667-
holeRect.right = center.x + innerRadius;
668-
holeRect.bottom = center.y + innerRadius;
669+
holeRect.left = x - innerRadius;
670+
holeRect.top = y - innerRadius;
671+
holeRect.right = x + innerRadius;
672+
holeRect.bottom = y + innerRadius;
669673
RectF boundingRect = mRectBuffer[1];
670674
boundingRect.set(holeRect);
671675

0 commit comments

Comments
 (0)
X Tutup