1. 將mpandroidchartlibrary-2-0-8.jar包copy到項目的libs中
2. 定義xml文件
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <com.github.mikephil.charting.charts.LineChart android:id="@+id/chart" android:layout_width="match_parent" android:layout_height="200dp" /> </LinearLayout>
3. 主要Java邏輯代碼如下,注釋已經都添加上了。
package com.example.sensorchart; import java.util.ArrayList; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import com.github.mikephil.charting.charts.LineChart; import com.github.mikephil.charting.components.Legend; import com.github.mikephil.charting.components.Legend.LegendForm; import com.github.mikephil.charting.components.XAxis.XAxisPosition; import com.github.mikephil.charting.data.Entry; import com.github.mikephil.charting.data.LineData; import com.github.mikephil.charting.data.LineDataSet; import com.shelwee.uilistview_demo.R; public class LineChartShow extends Activity { private LineChart mLineChart; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.line_chart); mLineChart = (LineChart) findViewById(R.id.spread_line_chart); // mTf = Typeface.createFromAsset(getAssets(), "OpenSans-Bold.ttf"); } @Override protected void onStart() { // TODO Auto-generated method stub LineData mLineData = getLineData(); showChart(mLineChart, mLineData, Color.rgb(114, 188, 223)); super.onStart(); } // 設置顯示的樣式 private void showChart(LineChart lineChart, LineData lineData, int color) { lineChart.setDrawBorders(false); // 是否在折線圖上添加邊框 // no description text lineChart.setDescription("");// 數據描述 // 如果沒有數據的時候,會顯示這個,類似listview的emtpyview lineChart .setNoDataTextDescription("You need to provide data for the chart."); // enable / disable grid background lineChart.setDrawGridBackground(false); // 是否顯示表格顏色 lineChart.setGridBackgroundColor(Color.WHITE & 0x70FFFFFF); // 表格的的顏色,在這里是是給顏色設置一個透明度 // enable touch gestures lineChart.setTouchEnabled(true); // 設置是否可以觸摸 // enable scaling and dragging lineChart.setDragEnabled(true);// 是否可以拖拽 lineChart.setScaleEnabled(true);// 是否可以縮放 lineChart.getAxisRight().setEnabled(false); // 隱藏右邊 的坐標軸 lineChart.getXAxis().setPosition(XAxisPosition.BOTTOM);//設置橫坐標在底部 lineChart.getXAxis().setGridColor(Color.TRANSPARENT);//去掉網格中豎線的顯示 // if disabled, scaling can be done on x- and y-axis separately lineChart.setPinchZoom(false);// lineChart.setBackgroundColor(color);// 設置背景 // add data lineChart.setData(lineData); // 設置數據 // get the legend (only possible after setting data) Legend mLegend = lineChart.getLegend(); // 設置比例圖標示,就是那個一組y的value的 // modify the legend ... // mLegend.setPosition(LegendPosition.LEFT_OF_CHART); mLegend.setForm(LegendForm.CIRCLE);// 樣式 mLegend.setFormSize(6f);// 字體 mLegend.setTextColor(Color.WHITE);// 顏色 // mLegend.setTypeface(mTf);// 字體 lineChart.animateX(2500); // 立即執行的動畫,x軸 } /** * 生成一個數據 * * @param count * 表示圖表中有多少個坐標點 * @param range * 用來生成range以內的隨機數 * @return */ private LineData getLineData() { String[] xData = Conductivity.getDeviceName();//獲得的數據,下同 Float[] yData = BroadcastCome.getBtData();// for (int i = 0; i < yData.length; i++) { System.out.println("lineChart_yData---:"+yData); } int dataLength = xData.length; ArrayList<String> xValues = new ArrayList<String>(); for (int i = 0; i < dataLength; i++) { // x軸顯示的數據,這里默認使用數字下標顯示 // xValues.add("" + i); xValues.add(xData[i]); } // y軸的數據 ArrayList<Entry> yValues = new ArrayList<Entry>(); for (int i = 0; i < dataLength; i++) { // float value = (float) (Math.random() * range) + 3; // yValues.add(new Entry(value, i)); yValues.add(new Entry(yData[i], i)); } // create a dataset and give it a type // y軸的數據集合 LineDataSet lineDataSet = new LineDataSet(yValues, "溫度數據一覽圖" /* 顯示在比例圖上 */); // mLineDataSet.setFillAlpha(110); // mLineDataSet.setFillColor(Color.RED); // 用y軸的集合來設置參數 lineDataSet.setLineWidth(1.75f); // 線寬 lineDataSet.setCircleSize(3f);// 顯示的圓形大小 lineDataSet.setColor(Color.WHITE);// 顯示顏色 lineDataSet.setCircleColor(Color.WHITE);// 圓形的顏色 lineDataSet.setHighLightColor(Color.WHITE); // 高亮的線的顏色 ArrayList<LineDataSet> lineDataSets = new ArrayList<LineDataSet>(); lineDataSets.add(lineDataSet); // add the datasets lineDataSet.setDrawCircles(false); lineDataSet.setDrawCubic(true); lineDataSet.setCubicIntensity(0.6f); lineDataSet.setDrawFilled(true); lineDataSet.setFillColor(Color.rgb(0, 255, 255)); // create a data object with the datasets LineData lineData = new LineData(xValues, lineDataSets); return lineData; } /** * * @param strings字符串轉換成float */ public Float[] stringTofloat(String[] strings) { Float[] data = new Float[strings.length]; for (int i = 0; i < strings.length; i++) { data[i] = Float.valueOf(strings[i].trim().replace("℃", "")); System.out.println("轉換后的數據:"+data[i]); } return data; } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. return super.onOptionsItemSelected(item); } }
效果圖借用原文中的圖片: