java - achartengine : how to repaint / redraw chart -
i want repaint chart everytime choose 1 of m adapter, first time graph drawn looks perfect, when go choose 1 , come looks draws 2 times same graph.
this source code :
public class mainactivity extends activity { private button btnconnect; private spinner spntime; private string[] durationdata = new string[]{ "pilih durasi", "1 minggu", "1 bulan", "3 bulan", "9 bulan", "12 bulan" }; int period = 0; private linearlayout lnchart; private progressdialog dialog; public string baseurl = "http://www.abcj.com/i="; private arraylist<dataitem> listdata; //chart variables public static final string type = "type"; private xymultipleseriesdataset mdataset = new xymultipleseriesdataset(); private xymultipleseriesrenderer mrenderer = new xymultipleseriesrenderer(); private xyseries mcurrentseries; private xyseriesrenderer mcurrentrenderer; private string mdateformat; private graphicalview mchartview; private int index = 0; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); btnconnect = (button)findviewbyid(r.id.btndownloadchartdata); spntime = (spinner)findviewbyid(r.id.spoptduration); listdata = new arraylist<dataitem>(); //chart initiation mrenderer.setapplybackgroundcolor(true); mrenderer.setbackgroundcolor(color.argb(100, 50, 50, 50)); mrenderer.setaxistitletextsize(16); mrenderer.setcharttitletextsize(20); mrenderer.setlabelstextsize(15); mrenderer.setlegendtextsize(15); mrenderer.setmargins(new int[] { 20, 30, 15, 0 }); mrenderer.setzoombuttonsvisible(true); mrenderer.setpointsize(10); btnconnect.setonclicklistener(new onclicklistener() { @override public void onclick(view arg0) { // todo auto-generated method stub arrayadapter<string> adapter = new arrayadapter<string>(mainactivity.this, android.r.layout.simple_dropdown_item_1line, durationdata); spntime.setadapter(adapter); spntime.setonitemselectedlistener(new onitemselectedlistener() { @override public void onitemselected(adapterview<?> arg0, view arg1, int arg2, long arg3) { // todo auto-generated method stub switch (arg2+1) { case 0: break; case 1: period = 7; break; case 2: period = 30; break; case 3: period = 90; break; case 4: period = 180; break; case 5: period = 360; break; default: break; } new loaddata(baseurl+period).execute(); } @override public void onnothingselected(adapterview<?> arg0) { // todo auto-generated method stub } }); } }); } @suppresslint("showtoast") @override protected void onresume() { // todo auto-generated method stub super.onresume(); if (mchartview == null) { lnchart = (linearlayout) findviewbyid(r.id.chart); mchartview = chartfactory.getlinechartview(this, mdataset, mrenderer); mrenderer.setclickenabled(true); mrenderer.setselectablebuffer(100); mchartview.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { seriesselection seriesselection = mchartview.getcurrentseriesandpoint(); double[] xy = mchartview.torealpoint(0); if (seriesselection == null) { toast.maketext(mainactivity.this, "no chart element clicked", toast.length_short) .show(); } } }); mchartview.setonlongclicklistener(new view.onlongclicklistener() { @suppresslint("showtoast") @override public boolean onlongclick(view v) { seriesselection seriesselection = mchartview.getcurrentseriesandpoint(); if (seriesselection == null) { toast.maketext(mainactivity.this, "no chart element long pressed", toast.length_short); return false; // no chart element long pressed, let // else handle event } else { toast.maketext(mainactivity.this, "chart element in series index " + seriesselection.getseriesindex() + " data point index " + seriesselection.getpointindex() + " long pressed", toast.length_short); return true; // element long pressed - event has been // handled } } }); mchartview.addzoomlistener(new zoomlistener() { public void zoomapplied(zoomevent e) { string type = "out"; if (e.iszoomin()) { type = "in"; } system.out.println("zoom " + type + " rate " + e.getzoomrate()); } public void zoomreset() { system.out.println("reset"); } }, true, true); mchartview.addpanlistener(new panlistener() { public void panapplied() { system.out.println("new x range=[" + mrenderer.getxaxismin() + ", " + mrenderer.getxaxismax() + "], y range=[" + mrenderer.getyaxismax() + ", " + mrenderer.getyaxismax() + "]"); } }); lnchart.removeallviews(); lnchart.addview(mchartview, new layoutparams(layoutparams.fill_parent, layoutparams.fill_parent)); } else { mchartview.repaint(); } } private class loaddata extends asynctask<void, void, string>{ string url = ""; public loaddata(string url) { // todo auto-generated constructor stub this.url = url; } @override protected void onpreexecute() { // todo auto-generated method stub super.onpreexecute(); dialog = progressdialog.show(mainactivity.this, "", "please wait"); } @override protected string doinbackground(void... params) { // todo auto-generated method stub string result = ""; try { result = connection.get(url); } catch (exception e) { // todo: handle exception result = ""; log.d("test chart", e.getmessage()); } return result; } @override protected void onpostexecute(string result) { // todo auto-generated method stub super.onpostexecute(result); fetchresponse(result.replace("\n", "").trim()); dialog.dismiss(); } } private void fetchresponse(string result) { // todo auto-generated method stub if (!result.equals("")) { try { jsonarray jsonarray = new jsonarray(result); dataitem item = null; (int = 1; < jsonarray.length(); i++) { jsonobject jsonobject = jsonarray.getjsonobject(i); item = new dataitem(jsonobject.optstring("lji_invest"), jsonobject.optdouble("persen_hmin1"), jsonobject.optdouble("lnu_nilai"), jsonobject.optdouble("selisih"), jsonobject.optstring("lji_id"), jsonobject.optstring("tanggal")); listdata.add(item); } renderchart(listdata); } catch (exception e) { log.d("test chart", e.getmessage()); } } } private void renderchart(arraylist<dataitem> listdata) { // todo auto-generated method stub string seriestitle = "series data"; xyseries series = new xyseries(seriestitle); mdataset.addseries(series); mcurrentseries = series; xyseriesrenderer renderer = new xyseriesrenderer(); mrenderer.addseriesrenderer(renderer); renderer.setfillpoints(true); mcurrentrenderer = renderer; (int = 0; < listdata.size(); i++) { mcurrentseries.add(listdata.get(i).getinunilai(), listdata.get(i).getpersenhmint1()); } if (mchartview != null) { mchartview.repaint(); } } @override protected void onrestoreinstancestate(bundle savedstate) { super.onrestoreinstancestate(savedstate); mdataset = (xymultipleseriesdataset) savedstate.getserializable("dataset"); mrenderer = (xymultipleseriesrenderer) savedstate.getserializable("renderer"); mcurrentseries = (xyseries) savedstate.getserializable("current_series"); mcurrentrenderer = (xyseriesrenderer) savedstate.getserializable("current_renderer"); mdateformat = savedstate.getstring("date_format"); } @override protected void onsaveinstancestate(bundle outstate) { super.onsaveinstancestate(outstate); outstate.putserializable("dataset", mdataset); outstate.putserializable("renderer", mrenderer); outstate.putserializable("current_series", mcurrentseries); outstate.putserializable("current_renderer", mcurrentrenderer); outstate.putstring("date_format", mdateformat); }
so how repaint chart? hope can show me fault, , tell me way fix it
use chartview.removeview(graphical_view)
before setting chart view new values, followed use 'graphical_view.repaint()' inorder set new value layout
however use multirenderer.setinscroll(true);
Comments
Post a Comment