package com.eyeem.theroll.widgets; import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.RectF; import android.widget.Toast; import com.eyeem.theroll.R; import com.eyeem.theroll.utils.AllColorsEver; import com.eyeem.theroll.utils.Log; import org.achartengine.GraphicalView; import org.achartengine.chart.PieChart; import org.achartengine.model.CategorySeries; import org.achartengine.renderer.DefaultRenderer; import org.achartengine.renderer.SimpleSeriesRenderer; import java.util.ArrayList; import java.util.HashMap; import java.util.List; /** * Created with IntelliJ IDEA. * User: vishna * Date: 4/6/13 * Time: 6:46 PM * To change this template use File | Settings | File Templates. */ public class ColorPie extends GraphicalView { ChartSetup setup; HashMap<String, Integer> values; public ColorPie(Context context, ChartSetup setup) { super(context, setup.chart); this.setup = setup; } public ColorPie(Context context) { this(context, initChart()); } ArrayList<SimpleSeriesRenderer> currentRenderers = new ArrayList<SimpleSeriesRenderer>(); public ArrayList<String> inOrder = new ArrayList<String>(); public void setupValues(HashMap<String, Integer> values) { setup.dataset.clear(); inOrder.clear(); for (SimpleSeriesRenderer ssr : currentRenderers) { setup.renderer.removeSeriesRenderer(ssr); } currentRenderers.clear(); // color --> count this.values = values; //setup.dataset.setTitle(null); int count = values.keySet().size(); for (String colorName : values.keySet()) { if (values.get(colorName) == null) { Toast.makeText(getContext(), "Missing hex for "+colorName, Toast.LENGTH_LONG).show(); continue; } inOrder.add(colorName); setup.dataset.add(colorName, values.get(colorName)); SimpleSeriesRenderer r = new SimpleSeriesRenderer(); currentRenderers.add(r); Log.i(getContext(), "color:" + colorName); r.setColor(AllColorsEver.name(colorName)); setup.renderer.addSeriesRenderer(r); } setup.renderer.setLabelsTextSize(getResources().getDimension(R.dimen.label_text_size)*0.66f); setup.renderer.setInScroll(true); repaint(); } private static class ChartSetup { CategorySeries dataset = new CategorySeries("Colors"); DefaultRenderer renderer = new DefaultRenderer(); PieChart chart; } private static ChartSetup initChart() { ChartSetup s = new ChartSetup(); s.renderer.setClickEnabled(true); s.renderer.setZoomEnabled(false); s.renderer.setPanEnabled(false); // s.renderer.setMarginsColor(App.the.getResources().getColor(R.color.bg)); s.chart = new PieChart(s.dataset, s.renderer) { @Override public void draw(Canvas canvas, int x, int y, int width, int height, Paint paint) { try { super.draw(canvas, x, y, width, height, paint); //To change body of overridden methods use File | Settings | File Templates. } catch (IndexOutOfBoundsException e) { } } @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 drawLabel(Canvas canvas, String labelText, DefaultRenderer renderer, List<RectF> prevLabelsBounds, int centerX, int centerY, float shortRadius, float longRadius, float currentAngle, float angle, int left, int right, int color, Paint paint, boolean line, boolean display) { // super.drawLabel(canvas, labelText, renderer, prevLabelsBounds, centerX, centerY, shortRadius, longRadius, currentAngle, angle, left, right, color, paint, line, display); //To change body of overridden methods use File | Settings | File Templates. } }; return s; } }