| |
| package com.xxmassdeveloper.mpchartexample; |
| |
| import android.graphics.Color; |
| import android.graphics.Typeface; |
| import android.os.Bundle; |
| import android.util.Log; |
| import android.view.Menu; |
| import android.view.MenuItem; |
| import android.view.WindowManager; |
| import android.widget.Toast; |
| |
| 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; |
| import com.github.mikephil.charting.components.YAxis; |
| import com.github.mikephil.charting.components.YAxis.AxisDependency; |
| 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.highlight.Highlight; |
| import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; |
| import com.github.mikephil.charting.listener.OnChartValueSelectedListener; |
| import com.github.mikephil.charting.utils.ColorTemplate; |
| import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase; |
| |
| public class RealtimeLineChartActivity extends DemoBase implements |
| OnChartValueSelectedListener { |
| |
| private LineChart mChart; |
| |
| @Override |
| protected void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, |
| WindowManager.LayoutParams.FLAG_FULLSCREEN); |
| setContentView(R.layout.activity_realtime_linechart); |
| |
| mChart = (LineChart) findViewById(R.id.chart1); |
| mChart.setOnChartValueSelectedListener(this); |
| |
| // no description text |
| mChart.setDescription(""); |
| mChart.setNoDataTextDescription("You need to provide data for the chart."); |
| |
| // enable touch gestures |
| mChart.setTouchEnabled(true); |
| |
| // enable scaling and dragging |
| mChart.setDragEnabled(true); |
| mChart.setScaleEnabled(true); |
| mChart.setDrawGridBackground(false); |
| |
| // if disabled, scaling can be done on x- and y-axis separately |
| mChart.setPinchZoom(true); |
| |
| // set an alternative background color |
| mChart.setBackgroundColor(Color.LTGRAY); |
| |
| LineData data = new LineData(); |
| data.setValueTextColor(Color.WHITE); |
| |
| // add empty data |
| mChart.setData(data); |
| |
| // get the legend (only possible after setting data) |
| Legend l = mChart.getLegend(); |
| |
| // modify the legend ... |
| // l.setPosition(LegendPosition.LEFT_OF_CHART); |
| l.setForm(LegendForm.LINE); |
| l.setTypeface(mTfLight); |
| l.setTextColor(Color.WHITE); |
| |
| XAxis xl = mChart.getXAxis(); |
| xl.setTypeface(mTfLight); |
| xl.setTextColor(Color.WHITE); |
| xl.setDrawGridLines(false); |
| xl.setAvoidFirstLastClipping(true); |
| xl.setEnabled(true); |
| |
| YAxis leftAxis = mChart.getAxisLeft(); |
| leftAxis.setTypeface(mTfLight); |
| leftAxis.setTextColor(Color.WHITE); |
| leftAxis.setAxisMaxValue(100f); |
| leftAxis.setAxisMinValue(0f); |
| leftAxis.setDrawGridLines(true); |
| |
| YAxis rightAxis = mChart.getAxisRight(); |
| rightAxis.setEnabled(false); |
| |
| } |
| |
| @Override |
| public boolean onCreateOptionsMenu(Menu menu) { |
| getMenuInflater().inflate(R.menu.realtime, menu); |
| return true; |
| } |
| |
| @Override |
| public boolean onOptionsItemSelected(MenuItem item) { |
| |
| switch (item.getItemId()) { |
| case R.id.actionAdd: { |
| addEntry(); |
| break; |
| } |
| case R.id.actionClear: { |
| mChart.clearValues(); |
| Toast.makeText(this, "Chart cleared!", Toast.LENGTH_SHORT).show(); |
| break; |
| } |
| case R.id.actionFeedMultiple: { |
| feedMultiple(); |
| break; |
| } |
| } |
| return true; |
| } |
| |
| private void addEntry() { |
| |
| LineData data = mChart.getData(); |
| |
| if (data != null) { |
| |
| ILineDataSet set = data.getDataSetByIndex(0); |
| // set.addEntry(...); // can be called as well |
| |
| if (set == null) { |
| set = createSet(); |
| data.addDataSet(set); |
| } |
| |
| data.addEntry(new Entry(set.getEntryCount(), (float) (Math.random() * 40) + 30f), 0); |
| data.notifyDataChanged(); |
| |
| // let the chart know it's data has changed |
| mChart.notifyDataSetChanged(); |
| |
| // limit the number of visible entries |
| mChart.setVisibleXRangeMaximum(120); |
| // mChart.setVisibleYRange(30, AxisDependency.LEFT); |
| |
| // move to the latest entry |
| mChart.moveViewToX(data.getEntryCount()); |
| |
| // this automatically refreshes the chart (calls invalidate()) |
| // mChart.moveViewTo(data.getXValCount()-7, 55f, |
| // AxisDependency.LEFT); |
| } |
| } |
| |
| private LineDataSet createSet() { |
| |
| LineDataSet set = new LineDataSet(null, "Dynamic Data"); |
| set.setAxisDependency(AxisDependency.LEFT); |
| set.setColor(ColorTemplate.getHoloBlue()); |
| set.setCircleColor(Color.WHITE); |
| set.setLineWidth(2f); |
| set.setCircleRadius(4f); |
| set.setFillAlpha(65); |
| set.setFillColor(ColorTemplate.getHoloBlue()); |
| set.setHighLightColor(Color.rgb(244, 117, 117)); |
| set.setValueTextColor(Color.WHITE); |
| set.setValueTextSize(9f); |
| set.setDrawValues(false); |
| return set; |
| } |
| |
| private Thread thread; |
| |
| private void feedMultiple() { |
| |
| if (thread != null) |
| thread.interrupt(); |
| |
| thread = new Thread(new Runnable() { |
| |
| @Override |
| public void run() { |
| for (int i = 0; i < 1000; i++) { |
| |
| runOnUiThread(new Runnable() { |
| |
| @Override |
| public void run() { |
| addEntry(); |
| } |
| }); |
| |
| try { |
| Thread.sleep(25); |
| } catch (InterruptedException e) { |
| // TODO Auto-generated catch block |
| e.printStackTrace(); |
| } |
| } |
| } |
| }); |
| |
| thread.start(); |
| } |
| |
| @Override |
| public void onValueSelected(Entry e, Highlight h) { |
| Log.i("Entry selected", e.toString()); |
| } |
| |
| @Override |
| public void onNothingSelected() { |
| Log.i("Nothing selected", "Nothing selected."); |
| } |
| |
| @Override |
| protected void onPause() { |
| super.onPause(); |
| |
| if (thread != null) { |
| thread.interrupt(); |
| } |
| } |
| } |