1 package com.xxmassdeveloper.mpchartexample.fragments; 2 3 import android.content.Context; 4 import android.graphics.Color; 5 import android.graphics.Typeface; 6 import android.os.Bundle; 7 import androidx.annotation.NonNull; 8 import androidx.fragment.app.Fragment; 9 import android.view.LayoutInflater; 10 import android.view.View; 11 import android.view.ViewGroup; 12 13 import com.github.mikephil.charting.charts.ScatterChart; 14 import com.github.mikephil.charting.data.BarData; 15 import com.github.mikephil.charting.data.BarDataSet; 16 import com.github.mikephil.charting.data.BarEntry; 17 import com.github.mikephil.charting.data.Entry; 18 import com.github.mikephil.charting.data.LineData; 19 import com.github.mikephil.charting.data.LineDataSet; 20 import com.github.mikephil.charting.data.PieData; 21 import com.github.mikephil.charting.data.PieDataSet; 22 import com.github.mikephil.charting.data.PieEntry; 23 import com.github.mikephil.charting.data.ScatterData; 24 import com.github.mikephil.charting.data.ScatterDataSet; 25 import com.github.mikephil.charting.interfaces.datasets.IBarDataSet; 26 import com.github.mikephil.charting.interfaces.datasets.ILineDataSet; 27 import com.github.mikephil.charting.interfaces.datasets.IScatterDataSet; 28 import com.github.mikephil.charting.utils.ColorTemplate; 29 import com.github.mikephil.charting.utils.FileUtils; 30 31 import java.util.ArrayList; 32 33 @SuppressWarnings({"SameParameterValue", "WeakerAccess"}) 34 public abstract class SimpleFragment extends Fragment { 35 36 private Typeface tf; 37 protected Context context; 38 39 @Override onAttach(Context context)40 public void onAttach(Context context) { 41 super.onAttach(context); 42 this.context = context; 43 } 44 SimpleFragment()45 public SimpleFragment() { 46 47 } 48 49 @Override onCreateView(@onNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)50 public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 51 tf = Typeface.createFromAsset(context.getAssets(), "OpenSans-Regular.ttf"); 52 return super.onCreateView(inflater, container, savedInstanceState); 53 } 54 generateBarData(int dataSets, float range, int count)55 protected BarData generateBarData(int dataSets, float range, int count) { 56 57 ArrayList<IBarDataSet> sets = new ArrayList<>(); 58 59 for(int i = 0; i < dataSets; i++) { 60 61 ArrayList<BarEntry> entries = new ArrayList<>(); 62 63 for(int j = 0; j < count; j++) { 64 entries.add(new BarEntry(j, (float) (Math.random() * range) + range / 4)); 65 } 66 67 BarDataSet ds = new BarDataSet(entries, getLabel(i)); 68 ds.setColors(ColorTemplate.VORDIPLOM_COLORS); 69 sets.add(ds); 70 } 71 72 BarData d = new BarData(sets); 73 d.setValueTypeface(tf); 74 return d; 75 } 76 generateScatterData(int dataSets, float range, int count)77 protected ScatterData generateScatterData(int dataSets, float range, int count) { 78 79 ArrayList<IScatterDataSet> sets = new ArrayList<>(); 80 81 ScatterChart.ScatterShape[] shapes = ScatterChart.ScatterShape.getAllDefaultShapes(); 82 83 for(int i = 0; i < dataSets; i++) { 84 85 ArrayList<Entry> entries = new ArrayList<>(); 86 87 for(int j = 0; j < count; j++) { 88 entries.add(new Entry(j, (float) (Math.random() * range) + range / 4)); 89 } 90 91 ScatterDataSet ds = new ScatterDataSet(entries, getLabel(i)); 92 ds.setScatterShapeSize(12f); 93 ds.setScatterShape(shapes[i % shapes.length]); 94 ds.setColors(ColorTemplate.COLORFUL_COLORS); 95 ds.setScatterShapeSize(9f); 96 sets.add(ds); 97 } 98 99 ScatterData d = new ScatterData(sets); 100 d.setValueTypeface(tf); 101 return d; 102 } 103 104 /** 105 * generates less data (1 DataSet, 4 values) 106 * @return PieData 107 */ generatePieData()108 protected PieData generatePieData() { 109 110 int count = 4; 111 112 ArrayList<PieEntry> entries1 = new ArrayList<>(); 113 114 for(int i = 0; i < count; i++) { 115 entries1.add(new PieEntry((float) ((Math.random() * 60) + 40), "Quarter " + (i+1))); 116 } 117 118 PieDataSet ds1 = new PieDataSet(entries1, "Quarterly Revenues 2015"); 119 ds1.setColors(ColorTemplate.VORDIPLOM_COLORS); 120 ds1.setSliceSpace(2f); 121 ds1.setValueTextColor(Color.WHITE); 122 ds1.setValueTextSize(12f); 123 124 PieData d = new PieData(ds1); 125 d.setValueTypeface(tf); 126 127 return d; 128 } 129 generateLineData()130 protected LineData generateLineData() { 131 132 ArrayList<ILineDataSet> sets = new ArrayList<>(); 133 LineDataSet ds1 = new LineDataSet(FileUtils.loadEntriesFromAssets(context.getAssets(), "sine.txt"), "Sine function"); 134 LineDataSet ds2 = new LineDataSet(FileUtils.loadEntriesFromAssets(context.getAssets(), "cosine.txt"), "Cosine function"); 135 136 ds1.setLineWidth(2f); 137 ds2.setLineWidth(2f); 138 139 ds1.setDrawCircles(false); 140 ds2.setDrawCircles(false); 141 142 ds1.setColor(ColorTemplate.VORDIPLOM_COLORS[0]); 143 ds2.setColor(ColorTemplate.VORDIPLOM_COLORS[1]); 144 145 // load DataSets from files in assets folder 146 sets.add(ds1); 147 sets.add(ds2); 148 149 LineData d = new LineData(sets); 150 d.setValueTypeface(tf); 151 return d; 152 } 153 getComplexity()154 protected LineData getComplexity() { 155 156 ArrayList<ILineDataSet> sets = new ArrayList<>(); 157 158 LineDataSet ds1 = new LineDataSet(FileUtils.loadEntriesFromAssets(context.getAssets(), "n.txt"), "O(n)"); 159 LineDataSet ds2 = new LineDataSet(FileUtils.loadEntriesFromAssets(context.getAssets(), "nlogn.txt"), "O(nlogn)"); 160 LineDataSet ds3 = new LineDataSet(FileUtils.loadEntriesFromAssets(context.getAssets(), "square.txt"), "O(n\u00B2)"); 161 LineDataSet ds4 = new LineDataSet(FileUtils.loadEntriesFromAssets(context.getAssets(), "three.txt"), "O(n\u00B3)"); 162 163 ds1.setColor(ColorTemplate.VORDIPLOM_COLORS[0]); 164 ds2.setColor(ColorTemplate.VORDIPLOM_COLORS[1]); 165 ds3.setColor(ColorTemplate.VORDIPLOM_COLORS[2]); 166 ds4.setColor(ColorTemplate.VORDIPLOM_COLORS[3]); 167 168 ds1.setCircleColor(ColorTemplate.VORDIPLOM_COLORS[0]); 169 ds2.setCircleColor(ColorTemplate.VORDIPLOM_COLORS[1]); 170 ds3.setCircleColor(ColorTemplate.VORDIPLOM_COLORS[2]); 171 ds4.setCircleColor(ColorTemplate.VORDIPLOM_COLORS[3]); 172 173 ds1.setLineWidth(2.5f); 174 ds1.setCircleRadius(3f); 175 ds2.setLineWidth(2.5f); 176 ds2.setCircleRadius(3f); 177 ds3.setLineWidth(2.5f); 178 ds3.setCircleRadius(3f); 179 ds4.setLineWidth(2.5f); 180 ds4.setCircleRadius(3f); 181 182 183 // load DataSets from files in assets folder 184 sets.add(ds1); 185 sets.add(ds2); 186 sets.add(ds3); 187 sets.add(ds4); 188 189 LineData d = new LineData(sets); 190 d.setValueTypeface(tf); 191 return d; 192 } 193 194 private final String[] mLabels = new String[] { "Company A", "Company B", "Company C", "Company D", "Company E", "Company F" }; 195 getLabel(int i)196 private String getLabel(int i) { 197 return mLabels[i]; 198 } 199 } 200