@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); }
private void ShowPlot() { mySimpleXYPlot = (XYPlot) findViewById(R.id.chartPlot); mySimpleXYPlot.setTitle("Weight"); if (plotLine != null) mySimpleXYPlot.removeSeries(plotLine); mySimpleXYPlot.getGraphWidget().getGridBackgroundPaint().setColor(Color.WHITE); mySimpleXYPlot.getGraphWidget().getGridLinePaint().setColor(Color.BLACK); mySimpleXYPlot .getGraphWidget() .getGridLinePaint() .setPathEffect(new DashPathEffect(new float[] {1, 1}, 1)); mySimpleXYPlot.getGraphWidget().getDomainOriginLinePaint().setColor(Color.BLACK); mySimpleXYPlot.getGraphWidget().getRangeOriginLinePaint().setColor(Color.BLACK); mySimpleXYPlot.setBorderStyle(Plot.BorderStyle.SQUARE, null, null); mySimpleXYPlot.getBorderPaint().setStrokeWidth(1); mySimpleXYPlot.getBorderPaint().setAntiAlias(false); mySimpleXYPlot.getBorderPaint().setColor(Color.WHITE); mySimpleXYPlot.getGraphWidget().setPaddingRight(5); // Create a formatter to use for drawing a series using LineAndPointRenderer: LineAndPointFormatter series1Format = new LineAndPointFormatter( Color.rgb(0, 100, 0), // line color Color.rgb(0, 100, 0), // point color Color.rgb(100, 200, 0)); // fill color // setup our line fill paint to be a slightly transparent gradient: Paint lineFill = new Paint(); lineFill.setAlpha(200); lineFill.setShader( new LinearGradient(0, 0, 0, 250, Color.WHITE, Color.GREEN, Shader.TileMode.MIRROR)); LineAndPointFormatter formatter = new LineAndPointFormatter(Color.rgb(0, 0, 0), Color.BLUE, Color.RED); formatter.setFillPaint(lineFill); plotLine = new SimpleXYSeries(Arrays.asList(dates), Arrays.asList(weights), "Weight over time"); mySimpleXYPlot.addSeries(plotLine, formatter); mySimpleXYPlot.redraw(); // draw a domain tick for each year: int min = DomainMin(); int max = DomainMax(); int domainStep = domainStep(min, max); mySimpleXYPlot.setDomainStep(XYStepMode.SUBDIVIDE, domainStep); // mySimpleXYPlot.setDomainBoundaries(min, max, BoundaryMode.AUTO); // customize our domain/range labels mySimpleXYPlot.setDomainLabel("Date"); mySimpleXYPlot.setRangeLabel("Weight"); Double minimum = FindMinimum(); Double maximum = FindMaximum(); Double stepSize = FindStep(maximum, minimum); mySimpleXYPlot.setRangeBoundaries(minimum, maximum, BoundaryMode.FIXED); mySimpleXYPlot.setRangeStep(XYStepMode.INCREMENT_BY_VAL, stepSize); mySimpleXYPlot.setDomainValueFormat( new Format() { private SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM"); @Override public StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos) { // because our timestamps are in seconds and SimpleDateFormat expects milliseconds // we multiply our timestamp by 1000: long timestamp = ((Number) obj).longValue() * 1000; Date date = new Date(timestamp); return dateFormat.format(date, toAppendTo, pos); } @Override public Object parseObject(String source, ParsePosition pos) { return null; } }); // by default, AndroidPlot displays developer guides to aid in laying out your plot. // To get rid of them call disableAllMarkup(): mySimpleXYPlot.disableAllMarkup(); }