Last active
March 11, 2016 08:28
-
-
Save yicone/f2b8306f135b20ad5dd7 to your computer and use it in GitHub Desktop.
使用 https://github.com/PhilJay/MPAndroidChart 绘制基金净值变化曲线
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public class SubjectNetWorthChartResp { | |
public String label1; | |
public String label2; | |
public String label3; | |
public int xSkipCount; | |
public List<String> xSet = new ArrayList<>(); | |
public List<Float> ySet1 = new ArrayList<>(); | |
public List<Float> ySet2 = new ArrayList<>(); | |
public List<Float> ySet3 = new ArrayList<>(); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public Call<SubjectNetWorthChartResp> getSubjectNetWorthChart(@Path("id") int subjectId) { | |
SubjectNetWorthChartResp resp = new SubjectNetWorthChartResp(); | |
resp.label1 = "南方宝元"; | |
resp.label2 = "沪深300"; | |
resp.label3 = "同类平均"; | |
resp.xSkipCount = 6; | |
Calendar rightNow = Calendar.getInstance(); | |
Calendar startDate = Calendar.getInstance(); | |
startDate.add(Calendar.MONTH, -1); | |
// 返回上月同日至今的图标数据 | |
float max = 9.0f; | |
float min = -3.0f; | |
Random random = new Random(); | |
for (Date date = startDate.getTime(); startDate.before(rightNow); startDate.add(Calendar.DATE, 1)) { | |
String strDate = new SimpleDateFormat("MM-dd").format(startDate.getTime()); | |
resp.xSet.add(strDate); | |
// http://stackoverflow.com/questions/6078157/random-nextfloat-is-not-applicable-for-floats | |
resp.ySet1.add(random.nextFloat() * (max - min) + min); | |
resp.ySet2.add(random.nextFloat() * (max - min) + min); | |
resp.ySet3.add(random.nextFloat() * (max - min) + min); | |
} | |
return resp; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
protected void getChartDataCallback(SubjectNetWorthChartResp resp) { | |
ArrayList<ILineDataSet> lineDateSets = getDataSet(resp); | |
LineData lineData = new LineData(resp.xSet, lineDateSets); | |
chart.setData(lineData); | |
XAxis xAxis = chart.getXAxis(); | |
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); | |
xAxis.setLabelsToSkip(resp.xSkipCount); | |
xAxis.enableGridDashedLine(5f, 5f, 0); | |
YAxis axisLeft = chart.getAxisLeft(); | |
// 处理Y轴坐标文字格式为 0.00% | |
axisLeft.setValueFormatter(new MyPercentFormatter()); | |
axisLeft.setPosition(YAxis.YAxisLabelPosition.INSIDE_CHART); | |
axisLeft.enableGridDashedLine(5f, 5f, 0); | |
axisLeft.setDrawZeroLine(false); | |
YAxis axisRight = chart.getAxisRight(); | |
axisRight.setDrawLabels(false); | |
axisRight.setDrawGridLines(false); | |
axisRight.setDrawZeroLine(false); | |
// 自定义YAxisRenderer,为了满足正负值坐标文字不同颜色的需求 | |
MyYAxisRenderer myYAxisRenderer = new MyYAxisRenderer(chart.getViewPortHandler(), axisLeft, chart.getTransformer(YAxis.AxisDependency.LEFT)); | |
chart.setRendererLeftYAxis(myYAxisRenderer); | |
Legend legend = chart.getLegend(); | |
legend.setPosition(Legend.LegendPosition.BELOW_CHART_RIGHT); | |
chart.setDescription(""); | |
chart.setNoDataText("暂无数据"); | |
chart.invalidate(); | |
} | |
private ArrayList<ILineDataSet> getDataSet(SubjectNetWorthChartResp resp) { | |
ArrayList<ILineDataSet> dataSets = null; | |
ArrayList<Entry> valueSet1 = new ArrayList<>(); | |
ArrayList<Entry> valueSet2 = new ArrayList<>(); | |
ArrayList<Entry> valueSet3 = new ArrayList<>(); | |
Entry entry; | |
for (int i = 0; i < resp.ySet1.size(); i++) { | |
entry = new Entry(resp.ySet1.get(i), i); | |
valueSet1.add(entry); | |
} | |
for (int i = 0; i < resp.ySet2.size(); i++) { | |
entry = new Entry(resp.ySet2.get(i), i); | |
valueSet2.add(entry); | |
} | |
for (int i = 0; i < resp.ySet3.size(); i++) { | |
entry = new Entry(resp.ySet3.get(i), i); | |
valueSet3.add(entry); | |
} | |
LineDataSet lineDataSet1 = new LineDataSet(valueSet1, resp.label1); | |
lineDataSet1.setColor(Color.parseColor("#FE3651")); | |
lineDataSet1.setDrawValues(false); | |
lineDataSet1.setDrawCircleHole(false); | |
lineDataSet1.setDrawCircles(false); | |
lineDataSet1.setHighlightEnabled(false); | |
LineDataSet lineDataSet2 = new LineDataSet(valueSet2, resp.label2); | |
lineDataSet2.setColor(Color.parseColor("#FBB04E")); | |
lineDataSet2.setDrawValues(false); | |
lineDataSet2.setDrawCircleHole(false); | |
lineDataSet2.setDrawCircles(false); | |
lineDataSet2.setHighlightEnabled(false); | |
LineDataSet lineDataSet3 = new LineDataSet(valueSet3, resp.label3); | |
lineDataSet3.setColor(Color.parseColor("#7FA6DD")); | |
lineDataSet3.setDrawValues(false); | |
lineDataSet3.setDrawCircleHole(false); | |
lineDataSet3.setDrawCircles(false); | |
lineDataSet3.setHighlightEnabled(false); | |
dataSets = new ArrayList<>(); | |
dataSets.add(lineDataSet1); | |
dataSets.add(lineDataSet2); | |
dataSets.add(lineDataSet3); | |
return dataSets; | |
} | |
class MyPercentFormatter extends PercentFormatter{ | |
public MyPercentFormatter(){ | |
mFormat = new DecimalFormat("###,###,##0.00"); | |
} | |
} | |
class MyYAxisRenderer extends YAxisRenderer { | |
public MyYAxisRenderer(ViewPortHandler viewPortHandler, YAxis yAxis, Transformer trans) { | |
super(viewPortHandler, yAxis, trans); | |
} | |
@Override | |
protected void drawYLabels(Canvas c, float fixedPosition, float[] positions, float offset) { | |
mAxisLabelPaint.setColor(resColorNumberGreen); | |
for (int i = 0; i < mYAxis.mEntryCount; i++) { | |
// 处理Y轴坐标文字的颜色 | |
float v = mYAxis.mEntries[i]; | |
if (v > 0) { | |
mAxisLabelPaint.setColor(resColorNumberRed); | |
} else if (v < 0) { | |
mAxisLabelPaint.setColor(resColorNumberGreen); | |
} else { | |
mAxisLabelPaint.setColor(mYAxis.getTextColor()); | |
} | |
String text = mYAxis.getFormattedLabel(i); | |
if (!mYAxis.isDrawTopYLabelEntryEnabled() && i >= mYAxis.mEntryCount - 1) | |
return; | |
c.drawText(text, fixedPosition, positions[i * 2 + 1] + offset, mAxisLabelPaint); | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment