• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 package com.xxmassdeveloper.mpchartexample;
3 
4 import android.annotation.SuppressLint;
5 import android.content.Context;
6 import android.content.Intent;
7 import android.graphics.Color;
8 import android.net.Uri;
9 import android.os.Bundle;
10 import androidx.annotation.NonNull;
11 import android.view.LayoutInflater;
12 import android.view.Menu;
13 import android.view.MenuItem;
14 import android.view.View;
15 import android.view.ViewGroup;
16 import android.view.WindowManager;
17 import android.widget.ArrayAdapter;
18 import android.widget.ListView;
19 
20 import com.github.mikephil.charting.charts.BarChart;
21 import com.github.mikephil.charting.components.XAxis;
22 import com.github.mikephil.charting.components.XAxis.XAxisPosition;
23 import com.github.mikephil.charting.components.YAxis;
24 import com.github.mikephil.charting.data.BarData;
25 import com.github.mikephil.charting.data.BarDataSet;
26 import com.github.mikephil.charting.data.BarEntry;
27 import com.github.mikephil.charting.interfaces.datasets.IBarDataSet;
28 import com.github.mikephil.charting.utils.ColorTemplate;
29 import com.xxmassdeveloper.mpchartexample.notimportant.DemoBase;
30 
31 import java.util.ArrayList;
32 import java.util.List;
33 
34 /**
35  * Demonstrates the use of charts inside a ListView. IMPORTANT: provide a
36  * specific height attribute for the chart inside your ListView item
37  *
38  * @author Philipp Jahoda
39  */
40 public class ListViewBarChartActivity extends DemoBase {
41 
42     @Override
onCreate(Bundle savedInstanceState)43     protected void onCreate(Bundle savedInstanceState) {
44         super.onCreate(savedInstanceState);
45         getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
46                 WindowManager.LayoutParams.FLAG_FULLSCREEN);
47         setContentView(R.layout.activity_listview_chart);
48 
49         setTitle("ListViewBarChartActivity");
50 
51         ListView lv = findViewById(R.id.listView1);
52 
53         ArrayList<BarData> list = new ArrayList<>();
54 
55         // 20 items
56         for (int i = 0; i < 20; i++) {
57             list.add(generateData(i + 1));
58         }
59 
60         ChartDataAdapter cda = new ChartDataAdapter(getApplicationContext(), list);
61         lv.setAdapter(cda);
62     }
63 
64     private class ChartDataAdapter extends ArrayAdapter<BarData> {
65 
ChartDataAdapter(Context context, List<BarData> objects)66         ChartDataAdapter(Context context, List<BarData> objects) {
67             super(context, 0, objects);
68         }
69 
70         @SuppressLint("InflateParams")
71         @NonNull
72         @Override
getView(int position, View convertView, @NonNull ViewGroup parent)73         public View getView(int position, View convertView, @NonNull ViewGroup parent) {
74 
75             BarData data = getItem(position);
76 
77             ViewHolder holder;
78 
79             if (convertView == null) {
80 
81                 holder = new ViewHolder();
82 
83                 convertView = LayoutInflater.from(getContext()).inflate(
84                         R.layout.list_item_barchart, null);
85                 holder.chart = convertView.findViewById(R.id.chart);
86 
87                 convertView.setTag(holder);
88 
89             } else {
90                 holder = (ViewHolder) convertView.getTag();
91             }
92 
93             // apply styling
94             if (data != null) {
95                 data.setValueTypeface(tfLight);
96                 data.setValueTextColor(Color.BLACK);
97             }
98             holder.chart.getDescription().setEnabled(false);
99             holder.chart.setDrawGridBackground(false);
100 
101             XAxis xAxis = holder.chart.getXAxis();
102             xAxis.setPosition(XAxisPosition.BOTTOM);
103             xAxis.setTypeface(tfLight);
104             xAxis.setDrawGridLines(false);
105 
106             YAxis leftAxis = holder.chart.getAxisLeft();
107             leftAxis.setTypeface(tfLight);
108             leftAxis.setLabelCount(5, false);
109             leftAxis.setSpaceTop(15f);
110 
111             YAxis rightAxis = holder.chart.getAxisRight();
112             rightAxis.setTypeface(tfLight);
113             rightAxis.setLabelCount(5, false);
114             rightAxis.setSpaceTop(15f);
115 
116             // set data
117             holder.chart.setData(data);
118             holder.chart.setFitBars(true);
119 
120             // do not forget to refresh the chart
121 //            holder.chart.invalidate();
122             holder.chart.animateY(700);
123 
124             return convertView;
125         }
126 
127         private class ViewHolder {
128 
129             BarChart chart;
130         }
131     }
132 
133     /**
134      * generates a random ChartData object with just one DataSet
135      *
136      * @return Bar data
137      */
generateData(int cnt)138     private BarData generateData(int cnt) {
139 
140         ArrayList<BarEntry> entries = new ArrayList<>();
141 
142         for (int i = 0; i < 12; i++) {
143             entries.add(new BarEntry(i, (float) (Math.random() * 70) + 30));
144         }
145 
146         BarDataSet d = new BarDataSet(entries, "New DataSet " + cnt);
147         d.setColors(ColorTemplate.VORDIPLOM_COLORS);
148         d.setBarShadowColor(Color.rgb(203, 203, 203));
149 
150         ArrayList<IBarDataSet> sets = new ArrayList<>();
151         sets.add(d);
152 
153         BarData cd = new BarData(sets);
154         cd.setBarWidth(0.9f);
155         return cd;
156     }
157 
158     @Override
onCreateOptionsMenu(Menu menu)159     public boolean onCreateOptionsMenu(Menu menu) {
160         getMenuInflater().inflate(R.menu.only_github, menu);
161         return true;
162     }
163 
164     @Override
onOptionsItemSelected(MenuItem item)165     public boolean onOptionsItemSelected(MenuItem item) {
166 
167         switch (item.getItemId()) {
168             case R.id.viewGithub: {
169                 Intent i = new Intent(Intent.ACTION_VIEW);
170                 i.setData(Uri.parse("https://github.com/PhilJay/MPAndroidChart/blob/master/MPChartExample/src/com/xxmassdeveloper/mpchartexample/ListViewBarChartActivity.java"));
171                 startActivity(i);
172                 break;
173             }
174         }
175 
176         return true;
177     }
178 
179     @Override
saveToGallery()180     public void saveToGallery() { /* Intentionally left empty */ }
181 }
182