package com.xxmassdeveloper.mpchartexample;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentActivity;
import com.github.mikephil.charting.charts.CombinedChart;
import com.github.mikephil.charting.components.Legend;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.BarData;
import com.github.mikephil.charting.data.BarDataSet;
import com.github.mikephil.charting.data.BarEntry;
import com.github.mikephil.charting.data.CombinedData;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.formatter.IndexAxisValueFormatter;
import com.xxmassdeveloper.mpchartexample.custom.MyMarkerView;
import com.xxmassdeveloper.mpchartexample.manage.JsonUtils;
import com.xxmassdeveloper.mpchartexample.manage.P1Data;
import java.util.ArrayList;
/**
* @Info
* @Auth Bello
* @Time 18-2-5 下午4:42
* @Ver
*/
public class MyChart3Activity extends FragmentActivity {
String v = "{\"msg\":\"操作成功\",\"data\":[{\"b\":30,\"t\":15,\"plasmaName\":\"保亭\",\"tb\":\"100.00\"},{\"b\":142,\"t\":124," +
"\"plasmaName\":\"巴马\",\"tb\":\"14.52\"},{\"b\":184,\"t\":91,\"plasmaName\":\"全州\",\"tb\":\"102.20\"},{\"b\":54,\"t\":56," +
"\"plasmaName\":\"大新\",\"tb\":\"-3.57\"},{\"b\":86,\"t\":84,\"plasmaName\":\"武鸣\",\"tb\":\"2.38\"},{\"b\":105,\"t\":92," +
"\"plasmaName\":\"马山\",\"tb\":\"14.13\"},{\"b\":47,\"t\":36,\"plasmaName\":\"琼中\",\"tb\":\"30.56\"},{\"b\":40,\"t\":20," +
"\"plasmaName\":\"白沙\",\"tb\":\"100.00\"},{\"b\":91,\"t\":121,\"plasmaName\":\"大化\",\"tb\":\"-24.79\"},{\"b\":77,\"t\":117," +
"\"plasmaName\":\"保康\",\"tb\":\"-34.19\"},{\"b\":91,\"t\":122,\"plasmaName\":\"石门\",\"tb\":\"-25.41\"},{\"b\":135,\"t\":78," +
"\"plasmaName\":\"武宁\",\"tb\":\"73.08\"},{\"b\":53,\"t\":0,\"plasmaName\":\"青田\",\"tb\":\"0.00\"},{\"b\":41,\"t\":23," +
"\"plasmaName\":\"醴陵\",\"tb\":\"78.26\"},{\"b\":163,\"t\":103,\"plasmaName\":\"上林\",\"tb\":\"58.25\"}],\"error\":\"-1\"}";
private CombinedChart mChart;
private XAxis xAxis;
private String[] quarters ;
private ArrayList<Entry> entries = new ArrayList<>();
private ArrayList<BarEntry> entries1 = new ArrayList<>();
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my_chart);
P1Data p1Data = (P1Data) JsonUtils.JsonStrToClass(v, P1Data.class);
quarters = new String[p1Data.getData().size()];
for (int i=0; i<p1Data.getData().size();i++){
quarters[i] = p1Data.getData().get(i).getPlasmaName();
entries.add(new Entry(i, Float.parseFloat(p1Data.getData().get(i).getTb())));
entries1.add(new BarEntry(i, p1Data.getData().get(i).getT()));
}
mChart = (CombinedChart) findViewById(R.id.my_chart);
//图表描述
mChart.getDescription().setEnabled(false);
//图表背景
mChart.setBackgroundColor(Color.WHITE);
//是否启用网格背景
mChart.setDrawGridBackground(false);
//在各条 bar 后面绘制 “灰色全值 bar”
mChart.setDrawBarShadow(false);
//Y轴方向上不允许拉伸
mChart.setScaleYEnabled(false);
mChart.setHighlightFullBarEnabled(false);
//true,没缩放功能。false,x轴和y轴可分别放大
mChart.setPinchZoom(false);
//要绘制的组件
mChart.setDrawOrder(new CombinedChart.DrawOrder[]{CombinedChart.DrawOrder.LINE, CombinedChart.DrawOrder.BAR});
//点击是显示的marker值
MyMarkerView mv = new MyMarkerView(this, R.layout.custom_marker_view);
mv.setChartView(mChart); // For bounds control
mChart.setMarker(mv); // Set the marker to the chart
//图例
Legend l = mChart.getLegend();
l.setWordWrapEnabled(true);
l.setVerticalAlignment(Legend.LegendVerticalAlignment.TOP);
l.setHorizontalAlignment(Legend.LegendHorizontalAlignment.LEFT);
l.setOrientation(Legend.LegendOrientation.HORIZONTAL);
l.setDrawInside(false);
YAxis rightAxis = mChart.getAxisRight();
rightAxis.setDrawGridLines(false);
// rightAxis.setAxisMinimum(-40f);
rightAxis.setTextColor(Color.RED);
// rightAxis.setAxisMaximum(100);
rightAxis.setDrawZeroLine(false);
rightAxis.setGranularityEnabled(false);
YAxis leftAxis = mChart.getAxisLeft();
leftAxis.setDrawGridLines(false);
leftAxis.setAxisMinimum(0f);
xAxis = mChart.getXAxis();
xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);
xAxis.setAxisMinimum(0f);
xAxis.setGranularity(1f);
xAxis.setGranularityEnabled(true);
xAxis.setDrawGridLines(false);
xAxis.setCenterAxisLabels(false);
//X轴文字
xAxis.setValueFormatter(new IndexAxisValueFormatter(quarters));
//以下是为了解决 柱状图 左右两边只显示了一半的问题 根据实际情况 而定
// xAxis.setAxisMaximum((float) (12 - 0.5));
xAxis.setDrawLabels(true);//绘制标签 指x轴上的对应数值
// xAxis.setLabelCount(8,false);
xAxis.setAvoidFirstLastClipping(false);//图表将避免第一个和最后一个标签条目被减掉在图表或屏幕的边缘
CombinedData data = new CombinedData();
data.setData(generateLineData());
data.setData(generateBarData());
xAxis.setAxisMaximum(data.getXMax() + 0.5f);
//动画
mChart.animateXY(3000, 3000);
mChart.setData(data);
mChart.invalidate();
}
/**
* 加载线条的数据
*
* @return
*/
private LineData generateLineData() {
LineData d = new LineData();
/*ArrayList<Entry> entries = new ArrayList<>();
for (int index = 0; index < 12; index++)
entries.add(new Entry(index, (float) (Math.random() * 15) + 25));
*/
LineDataSet set = new LineDataSet(entries, "Line DataSet");
set.setColor(Color.LTGRAY);
set.setLineWidth(0.5f);
set.setCircleColor(Color.GRAY);
set.setCircleRadius(0.8f);
set.setDrawCircles(false);
set.setFillColor(Color.LTGRAY);
set.setDrawFilled(true);
set.setMode(LineDataSet.Mode.LINEAR);
set.setDrawValues(false);
set.setValueTextSize(10f);
set.setValueTextColor(Color.rgb(240, 238, 70));
set.setAxisDependency(YAxis.AxisDependency.RIGHT); //以左边Y轴的标签绘制
d.addDataSet(set);
return d;
}
/**
* 加载矩形的数据
*
* @return
*/
private BarData generateBarData() {
/* ArrayList<BarEntry> entries1 = new ArrayList<>();
for (int index = 0; index < 12; index++) {
entries1.add(new BarEntry(index, (float) (Math.random() * 15) + 20));
}*/
// BarDataSet set1 = new BarDataSet(entries1, "Bar 1");
// set1.setColor(Color.rgb(113, 180, 230));
// set1.setValueTextColor(Color.rgb(60, 220, 78));
// set1.setValueTextSize(10f);
// set1.setAxisDependency(YAxis.AxisDependency.LEFT);
// BarData d = new BarData(set1);
// d.setBarWidth(0.40f);
// d.groupBars(0, 0.15f, 0.02f);
BarDataSet barDataSet = new BarDataSet(entries1, "Bar 1");
barDataSet.setColor(Color.parseColor("#9fc5e8"));
barDataSet.setBarBorderRadius(10f); //设置圆角矩形
barDataSet.setAxisDependency(YAxis.AxisDependency.LEFT);
BarData barData = new BarData();
barData.addDataSet(barDataSet);
xAxis.setAxisMinimum(-0.5f);
return barData;
}
}