• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 package com.xxmassdeveloper.mpchartexample;
3 
4 import android.content.Intent;
5 import android.graphics.Color;
6 import android.net.Uri;
7 import android.os.Bundle;
8 import android.view.Menu;
9 import android.view.MenuItem;
10 import android.view.WindowManager;
11 
12 import com.github.mikephil.charting.charts.BarChart;
13 import com.github.mikephil.charting.components.AxisBase;
14 import com.github.mikephil.charting.components.XAxis;
15 import com.github.mikephil.charting.components.XAxis.XAxisPosition;
16 import com.github.mikephil.charting.components.YAxis;
17 import com.github.mikephil.charting.data.BarData;
18 import com.github.mikephil.charting.data.BarDataSet;
19 import com.github.mikephil.charting.data.BarEntry;
20 import com.github.mikephil.charting.data.Entry;
21 import com.github.mikephil.charting.formatter.IAxisValueFormatter;
22 import com.github.mikephil.charting.formatter.IValueFormatter;
23 import com.github.mikephil.charting.utils.ViewPortHandler;
24 import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
25 
26 import java.text.DecimalFormat;
27 import java.util.ArrayList;
28 import java.util.List;
29 
30 public class BarChartPositiveNegative extends DemoBase {
31 
32     private BarChart chart;
33 
34     @Override
onCreate(Bundle savedInstanceState)35     protected void onCreate(Bundle savedInstanceState) {
36         super.onCreate(savedInstanceState);
37         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
38                 WindowManager.LayoutParams.FLAG_FULLSCREEN);
39         setContentView(R.layout.activity_barchart_noseekbar);
40 
41         setTitle("BarChartPositiveNegative");
42 
43         chart = findViewById(R.id.chart1);
44         chart.setBackgroundColor(Color.WHITE);
45         chart.setExtraTopOffset(-30f);
46         chart.setExtraBottomOffset(10f);
47         chart.setExtraLeftOffset(70f);
48         chart.setExtraRightOffset(70f);
49 
50         chart.setDrawBarShadow(false);
51         chart.setDrawValueAboveBar(true);
52 
53         chart.getDescription().setEnabled(false);
54 
55         // scaling can now only be done on x- and y-axis separately
56         chart.setPinchZoom(false);
57 
58         chart.setDrawGridBackground(false);
59 
60         XAxis xAxis = chart.getXAxis();
61         xAxis.setPosition(XAxisPosition.BOTTOM);
62         xAxis.setTypeface(tfRegular);
63         xAxis.setDrawGridLines(false);
64         xAxis.setDrawAxisLine(false);
65         xAxis.setTextColor(Color.LTGRAY);
66         xAxis.setTextSize(13f);
67         xAxis.setLabelCount(5);
68         xAxis.setCenterAxisLabels(true);
69         xAxis.setGranularity(1f);
70 
71         YAxis left = chart.getAxisLeft();
72         left.setDrawLabels(false);
73         left.setSpaceTop(25f);
74         left.setSpaceBottom(25f);
75         left.setDrawAxisLine(false);
76         left.setDrawGridLines(false);
77         left.setDrawZeroLine(true); // draw a zero line
78         left.setZeroLineColor(Color.GRAY);
79         left.setZeroLineWidth(0.7f);
80         chart.getAxisRight().setEnabled(false);
81         chart.getLegend().setEnabled(false);
82 
83         // THIS IS THE ORIGINAL DATA YOU WANT TO PLOT
84         final List<Data> data = new ArrayList<>();
85         data.add(new Data(0f, -224.1f, "12-29"));
86         data.add(new Data(1f, 238.5f, "12-30"));
87         data.add(new Data(2f, 1280.1f, "12-31"));
88         data.add(new Data(3f, -442.3f, "01-01"));
89         data.add(new Data(4f, -2280.1f, "01-02"));
90 
91         xAxis.setValueFormatter(new IAxisValueFormatter() {
92             @Override
93             public String getFormattedValue(float value, AxisBase axis) {
94                 return data.get(Math.min(Math.max((int) value, 0), data.size()-1)).xAxisValue;
95             }
96         });
97 
98         setData(data);
99     }
100 
setData(List<Data> dataList)101     private void setData(List<Data> dataList) {
102 
103         ArrayList<BarEntry> values = new ArrayList<>();
104         List<Integer> colors = new ArrayList<>();
105 
106         int green = Color.rgb(110, 190, 102);
107         int red = Color.rgb(211, 74, 88);
108 
109         for (int i = 0; i < dataList.size(); i++) {
110 
111             Data d = dataList.get(i);
112             BarEntry entry = new BarEntry(d.xValue, d.yValue);
113             values.add(entry);
114 
115             // specific colors
116             if (d.yValue >= 0)
117                 colors.add(red);
118             else
119                 colors.add(green);
120         }
121 
122         BarDataSet set;
123 
124         if (chart.getData() != null &&
125                 chart.getData().getDataSetCount() > 0) {
126             set = (BarDataSet) chart.getData().getDataSetByIndex(0);
127             set.setValues(values);
128             chart.getData().notifyDataChanged();
129             chart.notifyDataSetChanged();
130         } else {
131             set = new BarDataSet(values, "Values");
132             set.setColors(colors);
133             set.setValueTextColors(colors);
134 
135             BarData data = new BarData(set);
136             data.setValueTextSize(13f);
137             data.setValueTypeface(tfRegular);
138             data.setValueFormatter(new ValueFormatter());
139             data.setBarWidth(0.8f);
140 
141             chart.setData(data);
142             chart.invalidate();
143         }
144     }
145 
146     /**
147      * Demo class representing data.
148      */
149     private class Data {
150 
151         final String xAxisValue;
152         final float yValue;
153         final float xValue;
154 
Data(float xValue, float yValue, String xAxisValue)155         Data(float xValue, float yValue, String xAxisValue) {
156             this.xAxisValue = xAxisValue;
157             this.yValue = yValue;
158             this.xValue = xValue;
159         }
160     }
161 
162     private class ValueFormatter implements IValueFormatter
163     {
164 
165         private final DecimalFormat mFormat;
166 
ValueFormatter()167         ValueFormatter() {
168             mFormat = new DecimalFormat("######.0");
169         }
170 
171         @Override
getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler)172         public String getFormattedValue(float value, Entry entry, int dataSetIndex, ViewPortHandler viewPortHandler) {
173             return mFormat.format(value);
174         }
175     }
176 
177     @Override
onCreateOptionsMenu(Menu menu)178     public boolean onCreateOptionsMenu(Menu menu) {
179         getMenuInflater().inflate(R.menu.only_github, menu);
180         return true;
181     }
182 
183     @Override
onOptionsItemSelected(MenuItem item)184     public boolean onOptionsItemSelected(MenuItem item) {
185 
186         switch (item.getItemId()) {
187             case R.id.viewGithub: {
188                 Intent i = new Intent(Intent.ACTION_VIEW);
189                 i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/BarChartPositiveNegative.java"));
190                 startActivity(i);
191                 break;
192             }
193         }
194 
195         return true;
196     }
197 
198     @Override
saveToGallery()199     public void saveToGallery() { /* Intentionally left empty */ }
200 }
201