android - AChartEngine Annotations on a TimeChart not working -
i having problem getting annotations show on timechart. have graphutil class has following static method returns graphicalview:
public static graphicalview getgraph(activity activity, xymultipleseriesrenderer graphrenderer, xymultipleseriesdataset dataset, timeseries series, xyseriesrenderer seriesrenderer) { dataset.addseries(series); graphrenderer.addseriesrenderer(seriesrenderer); series.addannotation("hi", 100, 100); return chartfactory.gettimechartview(activity, dataset, graphrenderer, "m/d"); } it being called fragment, method this:
private void initflexiongraph() { mflexionseries = getflexiondata(); mflexiondataset = new xymultipleseriesdataset(); mflexiongraphrenderer = new xymultipleseriesrenderer(); mflexionseriesrenderer = new xyseriesrenderer(); mflexiongraph = graphutil.getgraph(getactivity(), mflexiongraphrenderer, mflexiondataset, mflexionseries, mflexionseriesrenderer); ((linearlayout) this.getview().findviewbyid(r.id.flexion_graph)).addview(mflexiongraph); } here getflexiondata() method:
private timeseries getflexiondata() { int count = cursor.getcount(); list<date> dates = new arraylist<date>(count); list<double> flexions = new arraylist<double>(count); if (cursor.movetofirst()) { { dates.add(dateutil.getbeginningcalendartimeofdate(cursor.getlong(cursor.getcolumnindex("date"))).gettime()); flexions.add(cursor.getdouble(cursor.getcolumnindex("best_flexion"))); } while (cursor.movetonext()); timeseries flexionseries = new timeseries(); (int = 0; < dates.size(); i++) { flexionseries.add(dates.get(i), flexions.get(i)); } } return flexionseries; } the rest of graph shows great, no annotations anywhere. set properties mflexionseriesrenderer , mflexiongraphrenderer, omitted them here. can post them if think there problem there.
when go different tab , come back, indexoutofboundsexception:
java.lang.indexoutofboundsexception: invalid index 1, size 1 @ java.util.arraylist.throwindexoutofboundsexception(arraylist.java:255) @ java.util.arraylist.get(arraylist.java:308) @ org.achartengine.util.indexxymap.getxbyindex(indexxymap.java:76) @ org.achartengine.model.xyseries.getannotationx(xyseries.java:260) @ org.achartengine.chart.xychart.draw(xychart.java:307) @ org.achartengine.graphicalview.ondraw(graphicalview.java:181) my onresume() method includes code (this isn't efficient way repaint, calling repaint() doesn't work me):
if (mflexiongraph == null) { initflexiongraph(); } else { mflexionseries = getflexiondata(); mflexiongraph = graphutil.getgraph(getactivity(), mflexiongraphrenderer, mflexiondataset, mflexionseries, mflexionseriesrenderer); ((linearlayout) this.getview().findviewbyid(r.id.flexion_graph)).removeallviews(); ((linearlayout) this.getview().findviewbyid(r.id.flexion_graph)).addview(flexiongraph); mflexiongraph.repaint(); } i'm not sure why annotation isn't showing (my linearlayout 300 x 300, string @ (100, 100) should appear). using achartengine-1.2.0 (downloaded nightly build on 3/24/2014). ideas?
try example
private linearlayout chartlayout; private graphicalview mchart; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); showtimegraph(); } private void showtimegraph() { chartlayout = (linearlayout) findviewbyid(r.id.graphholder); xymultipleseriesdataset dataset1 = new xymultipleseriesdataset(); timeseries series1 = new timeseries("timeseries"); series1 = getflexiondata(); // dataset1.addseries(0, series1); double[] limits = new double[] { 0, 40, 0, 200 }; xymultipleseriesrenderer multirenderer = new xymultipleseriesrenderer(); multirenderer.setcharttitle("title"); multirenderer.setxtitle("x axis"); multirenderer.setytitle("y axis"); multirenderer.setylabelsalign(align.left); multirenderer.setbarspacing(1); multirenderer.setbarwidth(10); multirenderer.setyaxismin(0); multirenderer.setyaxismax(250); multirenderer.setxaxismin(-1); multirenderer.setxaxismax(10); multirenderer.setlabelstextsize(15); multirenderer.setlegendtextsize(20); multirenderer.setaxistitletextsize(20); multirenderer.setcharttitletextsize(20); multirenderer.setlabelscolor(color.black); multirenderer.setaxescolor(color.black); multirenderer.setapplybackgroundcolor(true); // multirenderer.setbackgroundcolor(color.transparent); multirenderer.setmarginscolor(color.argb(0, 255, 255, 255)); multirenderer.setxlabelscolor(color.black); multirenderer.setylabelscolor(0, color.black); multirenderer.clearxtextlabels(); // multirenderer.setylabels(0); //remove units on y axis(the horizontal // axis since graph has been rotated 90 degree) // multirenderer.setxlabels(0); multirenderer.setxlabelspadding(-10f); // no effect // multirenderer.setylabelspadding(20f); // multirenderer.setmargins(new int[]{90, 0, 90, 0}); //top, left, bottom, // right. multirenderer.setorientation(org.achartengine.renderer.xymultipleseriesrenderer.orientation.horizontal); xyseriesrenderer incomerenderer = new xyseriesrenderer(); incomerenderer.setcolor(color.blue); incomerenderer.setchartvaluestextsize(20); incomerenderer.setfillpoints(true); incomerenderer.setdisplaychartvalues(true); incomerenderer.setchartvaluestextalign(align.center); // multirenderer.addseriesrenderer(incomerenderer); // numberformat noformat = new decimalformat( "##0.#e0" ); multirenderer.setylabels(5); // multirenderer.setylabelformat( noformat ,0); multirenderer.setinscroll(true); // multirenderer.setzoomenabled(false, false); // multirenderer.setpanenabled(false, false); multirenderer.setclickenabled(false); multirenderer.setselectablebuffer(10); string[] types = new string[] { barchart.type }; // setchartsettings(multirenderer); // intent intent = chartfactory.getbarchartintent(context, dataset1, // multirenderer, null); // intent intent = chartfactory.getcombinedxychartintent(context, dataset, // multirenderer, types, null); // multirenderer.setorientation(orientation.vertical); // mchart = (graphicalview) chartfactory.getbarchartview(context, // getbardataset(),getbarrenderer() ,null); // mchart = (graphicalview) chartfactory.getbarchartview(context, dataset1, // multirenderer, null); mchart = getgraph(this, multirenderer, dataset1,series1,incomerenderer); // mchart = (graphicalview) chartfactory.gettimechartview(this, dataset1,multirenderer , "m/d");// "m/d" chartlayout.addview(mchart); } protected defaultrenderer buildcategoryrenderer(int[] colors) { defaultrenderer renderer = new defaultrenderer(); renderer.setlabelstextsize(15); renderer.setlegendtextsize(15); renderer.setmargins(new int[] { 20, 30, 15, 0 }); (int color : colors) { simpleseriesrenderer r = new simpleseriesrenderer(); r.setcolor(color); renderer.addseriesrenderer(r); } return renderer; } public static graphicalview getgraph(activity activity, xymultipleseriesrenderer graphrenderer, xymultipleseriesdataset dataset, timeseries series, xyseriesrenderer seriesrenderer) { dataset.addseries(series); graphrenderer.addseriesrenderer(seriesrenderer); seriesrenderer.setannotationscolor(color.black); series.addannotation("this annotation", 4, 200); return chartfactory.gettimechartview(activity, dataset, graphrenderer, "m/d"); } private timeseries getflexiondata() { timeseries series1 = new timeseries("timeseries"); series1 = new timeseries("timeseries"); long value = new date().gettime() - 3 * timechart.day; random rr = new random(); for(int = 0; < 5; i++) { series1.add( , 100 + rr.nextint() % 100); } return series1; }
Comments
Post a Comment