package com.eyeem.theroll.widgets; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import com.eyeem.theroll.App; import com.eyeem.theroll.R; import org.achartengine.GraphicalView; import org.achartengine.chart.BarChart; import org.achartengine.model.XYMultipleSeriesDataset; import org.achartengine.model.XYSeries; import org.achartengine.renderer.DefaultRenderer; import org.achartengine.renderer.XYMultipleSeriesRenderer; import org.achartengine.renderer.XYSeriesRenderer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; /** * Created with IntelliJ IDEA. * User: vishna * Date: 4/6/13 * Time: 3:41 PM * To change this template use File | Settings | File Templates. */ public class Cities extends GraphicalView { ChartSetup setup; HashMap<String, Integer> values; public Cities(Context context, ChartSetup setup) { super(context, setup.chart); this.setup = setup; } public Cities(Context context) { this(context, initChart()); } public ArrayList<String> inOrder = new ArrayList<String>(); public void setupValues(HashMap<String, Integer> values) { inOrder.clear(); this.values = values; setup.currentSeries.setTitle(null); int count = values.keySet().size(); int max = 0; int i = 0; for (String cityName : values.keySet()) { if (max < values.get(cityName)) max = values.get(cityName); inOrder.add(cityName); setup.currentSeries.add(i, values.get(cityName)); setup.renderer.addXTextLabel(i, cityName); i++; } setup.renderer.setXLabels(0); setup.renderer.setYLabels(0); setup.renderer.setXAxisMin(-0.5); setup.renderer.setXAxisMax(count-0.5); setup.renderer.setYAxisMin(0); setup.renderer.setYAxisMax(max * 1.5); setup.currentRenderer.setColor(getResources().getColor(R.color.blueish)); setup.renderer.setLabelsTextSize(getResources().getDimension(R.dimen.label_text_size)*0.66f); repaint(); } private static class ChartSetup { XYSeries currentSeries; XYSeriesRenderer currentRenderer; XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset(); XYMultipleSeriesRenderer renderer = new XYMultipleSeriesRenderer(); BarChart chart; } private static ChartSetup initChart() { ChartSetup s = new ChartSetup(); s.currentSeries = new XYSeries("Data"); s.dataset.addSeries(s.currentSeries); s.currentRenderer = new XYSeriesRenderer(); s.renderer.addSeriesRenderer(s.currentRenderer); s.renderer.setClickEnabled(true); s.renderer.setZoomEnabled(false, false); s.renderer.setPanEnabled(false, false); s.renderer.setXAxisMin(1 - 0.5); s.renderer.setXAxisMax(5 + 0.5); s.renderer.setYAxisMin(0); s.renderer.setYAxisMax(5); s.renderer.setXLabelsColor(0xff2cddd4); s.renderer.setXLabelsAngle(30); s.renderer.setBarSpacing(0.7); s.renderer.setMarginsColor(App.the.getResources().getColor(R.color.bg)); s.renderer.setInScroll(true); s.chart = new BarChart(s.dataset, s.renderer, BarChart.Type.DEFAULT) { @Override protected int drawLegend(Canvas canvas, DefaultRenderer renderer, String[] titles, int left, int right, int y, int width, int height, int legendSize, Paint paint, boolean calculate) { return 0; //return super.drawLegend(canvas, renderer, titles, left, right, y, width, height, legendSize, paint, calculate); //To change body of overridden methods use File | Settings | File Templates. } @Override protected void drawXLabels(List<Double> xLabels, Double[] xTextLabelLocations, Canvas canvas, Paint paint, int left, int top, int bottom, double xPixelsPerUnit, double minX, double maxX) { canvas.translate(0, 30); super.drawXLabels(xLabels, xTextLabelLocations, canvas, paint, left, top, bottom, xPixelsPerUnit, minX, maxX); //To change body of overridden methods use File | Settings | File Templates. canvas.translate(0, -30); } }; return s; } }