• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 package com.xxmassdeveloper.mpchartexample;
3 
4 import android.Manifest;
5 import android.content.Intent;
6 import android.content.pm.PackageManager;
7 import android.net.Uri;
8 import android.os.Bundle;
9 import androidx.core.content.ContextCompat;
10 import android.view.Menu;
11 import android.view.MenuItem;
12 import android.view.WindowManager;
13 import android.widget.SeekBar;
14 import android.widget.SeekBar.OnSeekBarChangeListener;
15 import android.widget.TextView;
16 
17 import com.github.mikephil.charting.charts.BarChart;
18 import com.github.mikephil.charting.components.XAxis;
19 import com.github.mikephil.charting.components.XAxis.XAxisPosition;
20 import com.github.mikephil.charting.data.BarData;
21 import com.github.mikephil.charting.data.BarDataSet;
22 import com.github.mikephil.charting.data.BarEntry;
23 import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
24 import com.github.mikephil.charting.interfaces.datasets.IDataSet;
25 import com.github.mikephil.charting.utils.ColorTemplate;
26 import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
27 
28 import java.util.ArrayList;
29 
30 public class AnotherBarActivity extends DemoBase implements OnSeekBarChangeListener {
31 
32     private BarChart chart;
33     private SeekBar seekBarX, seekBarY;
34     private TextView tvX, tvY;
35 
36     @Override
onCreate(Bundle savedInstanceState)37     protected void onCreate(Bundle savedInstanceState) {
38         super.onCreate(savedInstanceState);
39         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
40                 WindowManager.LayoutParams.FLAG_FULLSCREEN);
41         setContentView(R.layout.activity_barchart);
42 
43         setTitle("AnotherBarActivity");
44 
45         tvX = findViewById(R.id.tvXMax);
46         tvY = findViewById(R.id.tvYMax);
47 
48         seekBarX = findViewById(R.id.seekBar1);
49         seekBarX.setOnSeekBarChangeListener(this);
50 
51         seekBarY = findViewById(R.id.seekBar2);
52         seekBarY.setOnSeekBarChangeListener(this);
53 
54         chart = findViewById(R.id.chart1);
55 
56         chart.getDescription().setEnabled(false);
57 
58         // if more than 60 entries are displayed in the chart, no values will be
59         // drawn
60         chart.setMaxVisibleValueCount(60);
61 
62         // scaling can now only be done on x- and y-axis separately
63         chart.setPinchZoom(false);
64 
65         chart.setDrawBarShadow(false);
66         chart.setDrawGridBackground(false);
67 
68         XAxis xAxis = chart.getXAxis();
69         xAxis.setPosition(XAxisPosition.BOTTOM);
70         xAxis.setDrawGridLines(false);
71 
72         chart.getAxisLeft().setDrawGridLines(false);
73 
74         // setting data
75         seekBarX.setProgress(10);
76         seekBarY.setProgress(100);
77 
78         // add a nice and smooth animation
79         chart.animateY(1500);
80 
81         chart.getLegend().setEnabled(false);
82     }
83 
84     @Override
onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)85     public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
86 
87         tvX.setText(String.valueOf(seekBarX.getProgress()));
88         tvY.setText(String.valueOf(seekBarY.getProgress()));
89 
90         ArrayList<BarEntry> values = new ArrayList<>();
91 
92         for (int i = 0; i < seekBarX.getProgress(); i++) {
93             float multi = (seekBarY.getProgress() + 1);
94             float val = (float) (Math.random() * multi) + multi / 3;
95             values.add(new BarEntry(i, val));
96         }
97 
98         BarDataSet set1;
99 
100         if (chart.getData() != null &&
101                 chart.getData().getDataSetCount() > 0) {
102             set1 = (BarDataSet) chart.getData().getDataSetByIndex(0);
103             set1.setValues(values);
104             chart.getData().notifyDataChanged();
105             chart.notifyDataSetChanged();
106         } else {
107             set1 = new BarDataSet(values, "Data Set");
108             set1.setColors(ColorTemplate.VORDIPLOM_COLORS);
109             set1.setDrawValues(false);
110 
111             ArrayList<IBarDataSet> dataSets = new ArrayList<>();
112             dataSets.add(set1);
113 
114             BarData data = new BarData(dataSets);
115             chart.setData(data);
116             chart.setFitBars(true);
117         }
118 
119         chart.invalidate();
120     }
121 
122     @Override
onCreateOptionsMenu(Menu menu)123     public boolean onCreateOptionsMenu(Menu menu) {
124         getMenuInflater().inflate(R.menu.bar, menu);
125         menu.removeItem(R.id.actionToggleIcons);
126         return true;
127     }
128 
129     @Override
onOptionsItemSelected(MenuItem item)130     public boolean onOptionsItemSelected(MenuItem item) {
131 
132         switch (item.getItemId()) {
133             case R.id.viewGithub: {
134                 Intent i = new Intent(Intent.ACTION_VIEW);
135                 i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/AnotherBarActivity.java"));
136                 startActivity(i);
137                 break;
138             }
139             case R.id.actionToggleValues: {
140 
141                 for (IDataSet set : chart.getData().getDataSets())
142                     set.setDrawValues(!set.isDrawValuesEnabled());
143 
144                 chart.invalidate();
145                 break;
146             }
147             /*
148             case R.id.actionToggleIcons: { break; }
149              */
150             case R.id.actionToggleHighlight: {
151 
152                 if(chart.getData() != null) {
153                     chart.getData().setHighlightEnabled(!chart.getData().isHighlightEnabled());
154                     chart.invalidate();
155                 }
156                 break;
157             }
158             case R.id.actionTogglePinch: {
159                 if (chart.isPinchZoomEnabled())
160                     chart.setPinchZoom(false);
161                 else
162                     chart.setPinchZoom(true);
163 
164                 chart.invalidate();
165                 break;
166             }
167             case R.id.actionToggleAutoScaleMinMax: {
168                 chart.setAutoScaleMinMaxEnabled(!chart.isAutoScaleMinMaxEnabled());
169                 chart.notifyDataSetChanged();
170                 break;
171             }
172             case R.id.actionToggleBarBorders: {
173                 for (IBarDataSet set : chart.getData().getDataSets())
174                     ((BarDataSet)set).setBarBorderWidth(set.getBarBorderWidth() == 1.f ? 0.f : 1.f);
175 
176                 chart.invalidate();
177                 break;
178             }
179             case R.id.animateX: {
180                 chart.animateX(2000);
181                 break;
182             }
183             case R.id.animateY: {
184                 chart.animateY(2000);
185                 break;
186             }
187             case R.id.animateXY: {
188 
189                 chart.animateXY(2000, 2000);
190                 break;
191             }
192             case R.id.actionSave: {
193                 if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
194                     saveToGallery();
195                 } else {
196                     requestStoragePermission(chart);
197                 }
198                 break;
199             }
200         }
201         return true;
202     }
203 
204     @Override
saveToGallery()205     protected void saveToGallery() {
206         saveToGallery(chart, "AnotherBarActivity");
207     }
208 
209     @Override
onStartTrackingTouch(SeekBar seekBar)210     public void onStartTrackingTouch(SeekBar seekBar) {}
211 
212     @Override
onStopTrackingTouch(SeekBar seekBar)213     public void onStopTrackingTouch(SeekBar seekBar) {}
214 }
215