MPAndroidChart 的基本使用和配置
LaverneJett
8年前
<p>MPAndroidChart 是一个Android非常强大的图标库,包括线形图,柱状图,饼图,雷达图,散列图,等等只要你见过的图都有。</p> <h2>效果图</h2> <p>为了演示各个属性,好多对默认属性进行了相反操作:</p> <p style="text-align:center"><img src="https://simg.open-open.com/show/75920b84372df4c52812ec8a0e07209c.png"></p> <p style="text-align:center">静态效果图</p> <h2>常用属性的基本配置</h2> <pre> <code class="language-java">package me.febsky.test; import android.graphics.Color; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.components.AxisBase; 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.Entry; import com.github.mikephil.charting.data.LineData; import com.github.mikephil.charting.data.LineDataSet; import com.github.mikephil.charting.formatter.IAxisValueFormatter; import java.util.ArrayList; import static com.github.mikephil.charting.components.YAxis.YAxisLabelPosition.INSIDE_CHART; public class MainActivity extends AppCompatActivity { private LineChart mChart; private int[] mColors = new int[]{ Color.parseColor("#5abdfc"), //蓝色 Color.parseColor("#eb73f6") //紫色 }; protected String[] mMonths = new String[]{ "1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mChart = (LineChart) findViewById(R.id.chart); initChartView(); /**-------------这里的数据不重要,主要用随机数的方式生成点坐标-------------**/ //设置模拟数据 ArrayList<Entry> yVals = new ArrayList<Entry>(); for (int i = 0; i < 12; i++) { yVals.add(new Entry(i, (float) (Math.random() * 10000f))); } ArrayList<Entry> yVals2 = new ArrayList<Entry>(); for (int i = 0; i < 12; i++) { yVals2.add(new Entry(i, (float) (Math.random() * 10000f))); } addDataSet(yVals, "一居"); addDataSet(yVals2, "两居"); /**--------------------------**/ //图标的下边的指示块 图例 Legend l = mChart.getLegend(); l.setForm(Legend.LegendForm.LINE); l.setXEntrySpace(40); } private void initChartView() { mChart.setDrawGridBackground(false); mChart.setDescription(null); //右下角说明文字 mChart.setDrawBorders(true); //四周是不是有边框 mChart.setBorderWidth(0.5f); mChart.setBorderColor(Color.parseColor("#b3b3b3")); //边框颜色,默认黑色? // mChart.setVisibleXRangeMaximum(4); // enable touch gestures mChart.setTouchEnabled(true); // if disabled, scaling can be done on x- and y-axis separately //禁止x轴y轴同时进行缩放 mChart.setPinchZoom(false); // enable scaling and dragging mChart.setDragEnabled(true); mChart.setScaleEnabled(true); //控制轴上的坐标绘制在什么地方 上边下边左边右边 XAxis xAxis = mChart.getXAxis(); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); //x轴是在上边显示还是显示在下边 xAxis.enableGridDashedLine(10f, 10f, 0f); //背景用虚线表格来绘制 给整成虚线 xAxis.setAxisMinimum(0f);//设置轴的最小值。这样设置将不会根据提供的数据自动计算。 xAxis.setGranularityEnabled(true); //粒度 xAxis.setGranularity(1f); //缩放的时候有用,比如放大的时候,我不想把横轴的月份再细分 xAxis.setValueFormatter(new IAxisValueFormatter() { @Override public String getFormattedValue(float value, AxisBase axis) { return mMonths[(int) value % mMonths.length]; } @Override public int getDecimalDigits() { return 0; } }); // xAxis.setAxisLineWidth(0f); //设置坐标轴那条线的宽度 xAxis.setDrawAxisLine(false); //是否显示坐标轴那条轴 xAxis.setDrawLabels(true); //是不是显示轴上的刻度 xAxis.setLabelCount(mMonths.length); //强制有多少个刻度 xAxis.setTextColor(Color.parseColor("#b3b3b3")); //隐藏左侧坐标轴显示右侧坐标轴,并对右侧的轴进行配置 mChart.getAxisLeft().setEnabled(false); YAxis leftAxis = mChart.getAxisRight(); leftAxis.setEnabled(true); leftAxis.enableGridDashedLine(10f, 10f, 0f); leftAxis.setAxisMinimum(0); leftAxis.setDrawAxisLine(false); //坐标轴绘制在图表的内侧 leftAxis.setPosition(INSIDE_CHART); leftAxis.setTextColor(Color.parseColor("#b3b3b3")); //确实没看懂这个是干嘛用的,默认是10f //这个玩意好像有坐标轴enable的时候是不可用的 leftAxis.setSpaceBottom(10f); //一个chart中包含一个Data对象,一个Data对象包含多个DataSet对象, // 每个DataSet是对应一条线上的所有点(相对于折线图来说) mChart.setData(new LineData()); } /** * Author: liuqiang * Time: 2016-12-26 15:58 * Description: 根据数据集合,动态构建DataSet,来绘制界面 */ private void addDataSet(ArrayList<Entry> entryList, String dataSetName) { LineData data = mChart.getData(); if (data != null) { int count = data.getDataSetCount(); LineDataSet set = new LineDataSet(entryList, dataSetName); set.setLineWidth(1.5f); set.setCircleRadius(3.5f); int color = mColors[count % mColors.length]; set.setColor(color); set.setCircleColor(color); set.setHighLightColor(color); set.setValueTextSize(10f); set.setDrawValues(false); //节点不显示具体数值 set.setValueTextColor(color); set.enableDashedHighlightLine(10f, 5f, 0f); //选中某个点的时候高亮显示只是线 set.setDrawFilled(true); //填充折线图折线和坐标轴之间 set.setFillColor(color); // set.setDrawVerticalHighlightIndicator(false);//取消纵向辅助线 set.setDrawHorizontalHighlightIndicator(false);//取消横向辅助线 data.addDataSet(set); data.notifyDataChanged(); mChart.notifyDataSetChanged(); //这行代码必须放到这里,这里设置的是图表这个视窗能显示,x坐标轴,从最大值到最小值之间 //多少段,好像这个库没有办法设置x轴中的间隔的大小 mChart.setVisibleXRangeMaximum(6); mChart.invalidate(); } } }</code></pre> <p> </p> <p> </p> <p> </p>