/** * DESCRIPTION: Creates the graph. * * @see android.app.Activity#onCreate(android.os.Bundle) */ public void onCreate(Bundle savedInstanceState, Activity parent, XYPlot xyplot) { this.activity = parent; this.plot = xyplot; // get current units of measurement units = new Units(Settings.KEY_UNITS); // create a formatter to use for drawing the plot series plotFormatter = new BarFormatter( activity.getResources().getColor(R.color.plot_fill_color), activity.getResources().getColor(R.color.plot_line_color)); // create a formatter for average label float hOffset = 50f; float vOffset = -10f; avgLabelFormatter = new PointLabelFormatter( activity.getResources().getColor(R.color.plot_avgline_color), hOffset, vOffset); // create a formatter to use for drawing the average line avgFormatter = new LineAndPointFormatter( activity.getResources().getColor(R.color.plot_avgline_color), null, null, avgLabelFormatter); // white background for the plot plot.getGraphWidget().getGridBackgroundPaint().setColor(Color.WHITE); // remove the series legend plot.getLayoutManager().remove(plot.getLegendWidget()); // make room for bigger labels // TODO: is there a better way to do this? float width = plot.getGraphWidget().getRangeLabelWidth() * 2f; plot.getGraphWidget().setRangeLabelWidth(width); width = plot.getGraphWidget().getDomainLabelWidth() * 1.5f; plot.getGraphWidget().setDomainLabelWidth(width); float margin = plot.getGraphWidget().getMarginTop() * 3f; plot.getGraphWidget().setMarginTop(margin); margin = plot.getGraphWidget().getMarginBottom() * 3f; plot.getGraphWidget().setMarginBottom(margin); // define plot axis labels plot.setRangeLabel(units.getLiquidVolumeLabel()); plot.setDomainLabel(activity.getString(R.string.months_label)); // specify format of axis value labels plot.setRangeValueFormat(ylabels); plot.setDomainValueFormat(xlabels); // plot the data drawPlot(); }
@Override public void onCreate(Bundle savedInstanceState) { // android boilerplate stuff super.onCreate(savedInstanceState); setContentView(R.layout.dynamicxyplot_example); // get handles to our View defined in layout.xml: dynamicPlot = (XYPlot) findViewById(R.id.dynamicXYPlot); plotUpdater = new MyPlotUpdater(dynamicPlot); // only display whole numbers in domain labels dynamicPlot.getGraphWidget().setDomainValueFormat(new DecimalFormat("0")); // getInstance and position datasets: data = new SampleDynamicXYDatasource(); SampleDynamicSeries sine1Series = new SampleDynamicSeries(data, 0, "Sine 1"); SampleDynamicSeries sine2Series = new SampleDynamicSeries(data, 1, "Sine 2"); LineAndPointFormatter formatter1 = new LineAndPointFormatter(Color.rgb(0, 0, 0), null, null, null); formatter1.getLinePaint().setStrokeJoin(Paint.Join.ROUND); formatter1.getLinePaint().setStrokeWidth(10); dynamicPlot.addSeries(sine1Series, formatter1); LineAndPointFormatter formatter2 = new LineAndPointFormatter(Color.rgb(0, 0, 200), null, null, null); formatter2.getLinePaint().setStrokeWidth(10); formatter2.getLinePaint().setStrokeJoin(Paint.Join.ROUND); // formatter2.getFillPaint().setAlpha(220); dynamicPlot.addSeries(sine2Series, formatter2); // hook up the plotUpdater to the data model: data.addObserver(plotUpdater); // thin out domain tick labels so they dont overlap each other: dynamicPlot.setDomainStepMode(XYStepMode.INCREMENT_BY_VAL); dynamicPlot.setDomainStepValue(5); dynamicPlot.setRangeStepMode(XYStepMode.INCREMENT_BY_VAL); dynamicPlot.setRangeStepValue(10); dynamicPlot.setRangeValueFormat(new DecimalFormat("###.#")); // uncomment this line to freeze the range boundaries: dynamicPlot.setRangeBoundaries(-100, 100, BoundaryMode.FIXED); // create a dash effect for domain and range grid lines: DashPathEffect dashFx = new DashPathEffect(new float[] {PixelUtils.dpToPix(3), PixelUtils.dpToPix(3)}, 0); dynamicPlot.getGraphWidget().getDomainGridLinePaint().setPathEffect(dashFx); dynamicPlot.getGraphWidget().getRangeGridLinePaint().setPathEffect(dashFx); }