1.2. Source code Mainactivity.java public class Mainactivity extends appcompatactivity {public enum ChartType {line_chart, Colum N_chart, Pie_chart, Bubble_chart, Preview_line_chart, Preview_column_chart, other} @Override protected void OnCreate ( Bundle savedinstancestate) {super.oncreate (savedinstancestate); Setcontentview (R.layout.activity_main); if ( Savedinstancestate = = null) {Getsupportfragmentmanager (). BeginTransaction (). Add (R.id.container, new Placeholderfragment ()). commit (); }} public static class Placeholderfragment extends Fragment implements Adapterview.onitemclicklistener {private ListView ListView; Private Chartsamplesadapter adapter; Public placeholderfragment () {} @Override public View oncreateview (layoutinflater inflater, ViewGroup container, Bundle s Avedinstancestate) {View Rootview = inflater.inflate (R.layout.fragment_main, container, false); listview = (ListView) Ro Otview.findviewbyid (Android. R.id.list); adapter = new Chartsamplesadapter (getactivity (), 0, GeneratesampLesdescriptions ()); Listview.setadapter (adapter); Listview.setonitemclicklistener (this); return rootview; } @Override public void Onitemclick (Adapterview Adapter, view view, int position, long id) {Intent Intent; switch (position) {case 0://Line Chart; Intent = new Intent (Getactivity (), linechartactivity.class); StartActivity (Intent); Break Case 1://Column Chart; Intent = new Intent (getactivity (), columnchartactivity.class); StartActivity (Intent); Break Case 2://Pie Chart; Intent = new Intent (getactivity (), piechartactivity.class); StartActivity (Intent); Break Default:break; }} Private List Generatesamplesdescriptions () {List List = new ArrayList (); List.add (New Chartsampledescription ("line chart", "This is the line chart", Charttype.line_chart)); List.add (New Chartsampledescription ("Column chart", "This is Column chart", Charttype.column_chart)); List.add (New Chartsampledescription ("Pie chart", "This is Pie chart", Charttype.pie_chart)); return list; }} public static class Chartsamplesadapter extends Arrayadapter {Public Chartsamplesadapter (context context, int resource, List objects) {Super (context, resource, objects), @Override public View getView (int position, view Convertview, ViewGroup Parent) {Viewholder holder; if (Convertview = = null) {Convertview = View.inflate (GetContext (), r.layout.list_item_sample , null); Holder = new Viewholder (); Holder.text1 = (TextView) Convertview.findviewbyid (R.ID.TEXT1); Holder.text2 = (TextView) Convertview.findviewbyid (R.ID.TEXT2); Holder.chartlayout = (framelayout) Convertview.findviewbyid (r.id.chart_layout); Convertview.settag (holder); } else {holder = (Viewholder) Convertview.gettag ();} Chartsampledescription item = getItem (position); Holder.chartLayout.setVisibility (view.visible); Holder.chartLayout.removeAllViews (); Abstractchartview Chart; Switch (item.charttype) {case line_chart:chart = new Linechartview (GetContext ()); Holder.chartLayout.addView (CHART); Break Case Column_chart:chart = new Columnchartview (GetContext ()); Holder.chartLayout.addView (chart); Break Case Pie_chart:chart = new Piechartview(GetContext ()); Holder.chartLayout.addView (chart); Break Case Bubble_chart:chart = new Bubblechartview (GetContext ()); Holder.chartLayout.addView (chart); Break Default:chart = null; Holder.chartLayout.setVisibility (View.gone); Break if (null! = chart) {chart.setinteractive (false);//Disable Touch handling for chart on the ListView.} holder.text1.set Text (ITEM.TEXT1); Holder.text2.setText (ITEM.TEXT2); return convertview; } private class Viewholder {TextView Text1; TextView Text2; Framelayout ChartLayout; }} public static class Chartsampledescription {String Text1; String Text2; ChartType ChartType; Public Chartsampledescription (String Text1, String text2, ChartType ChartType) {this.text1 = Text1; this.text2 = Text2; t His.charttype = ChartType; }}} Linechartactivity.java public class Linechartactivity extends appcompatactivity {@Override protected void onCreate ( Bundle savedinstancestate) {super.oncreate (savedinstancestate); Setcontentview (R.layout.activity_line_chart); if(savedinstancestate = = null) {Getsupportfragmentmanager (). BeginTransaction (). Add (R.id.container, New Placeholderfragment ()). commit ();} }/** * A fragment containing a line chart. */public static class Placeholderfragment extends Fragment {private Linechartview chart; private linechartdata data; pri vate int numberoflines = 1; private int maxnumberoflines = 4; private int numberofpoints = 12; float[][] Randomnumberstab = new Float[maxnumberoflines][numberofpoints]; Private Boolean hasaxes = true; Private Boolean hasaxesnames = true; Private Boolean haslines = true; Private Boolean haspoints = true; Private Valueshape shape = valueshape.circle; Private Boolean isfilled = false; Private Boolean haslabels = false; Private Boolean iscubic = false; Private Boolean haslabelforselected = false; Private Boolean Pointshavedifferentcolor; Public placeholderfragment () {} @Override public View oncreateview (layoutinflater inflater, ViewGroup container, Bundle s Avedinstancestate) {SETHASOPTIONSMENU (true); View Rootview = inflater.inflate (R.layout.fragment_line_chart, container, false); Chart = (Linechartview) Rootview.findviewbyid (R.id.chart); Chart.setonvaluetouchlistener (New Valuetouchlistener ()); Generate some random values. Generatevalues (); Generatedata (); To disable view recalculation, see the Togglecubic () method for more information. Chart.setviewportcalculationenabled (FALSE); Resetviewport (); return rootview; }//Each column has a value of private void Generatevalues () {for (int i = 0; i < maxnumberoflines; ++i) {for (int j = 0; J < numberof Points; ++J) {//RANDOMNUMBERSTAB[I][J] = (float) math.random () * 100f; randomnumberstab[i][j] = 5;}} } private void Resetviewport () {//Reset viewport height range to (0,100) Final Viewport v = new Viewport (Chart.getmaximu Mviewport ()); V.bottom = 0; V.top = 100; V.left = 0; V.right = numberOfPoints-1; Chart.setmaximumviewport (v); Chart.setcurrentviewport (v); }//generate generates private void Generatedata () {List lines = new ArrayList (); for (int i = 0; i < NumberOfLines; ++i) {List values = new ArrayList (); for (int j = 0; j < numberofpoints; ++j) {Values.add (New Pointvalue (J, Randomnumberstab[i][j]));} Line line = new line (values); Line.setcolor (Chartutils.colors[i]); Line.setshape (Shape); Line.setcubic (iscubic); Line.setfilled (isfilled); Line.sethaslabels (Haslabels); Line.sethaslabelsonlyforselected (haslabelforselected); Line.sethaslines (Haslines); Line.sethaspoints (haspoints); if (Pointshavedifferentcolor) {Line.setpointcolor (chartutils.colors[(i + 1)% ChartUtils.COLORS.length]);} lines.add ( line); } data = new Linechartdata (lines); if (hasaxes) {Axis AxisX = new Axis (); Axis Axisy = new Axis (). Sethaslines (True); if (hasaxesnames) {axisx.setname ("axis X"); Axisy.setname ("Axis Y"); Data.setaxisxbottom (AxisX); Data.setaxisyleft (Axisy); } else {data.setaxisxbottom (null); Data.setaxisyleft (null);} data.setbasevalue (float.negative_infinity); Chart.setlinechartdata (data); } Private class Valuetouchlistener implements Linechartonvalueselectlistener {@Override public void Onvalueselected (int lineindex, int pointIndex, pointvalue value) {Toast.maketext (getactivity (), "Selected:" + value, Toast. Length_short). Show (); } @Override public void onvaluedeselected () {//TODO auto-generated Method stub}}} 3.xml Activity_main.xml Fragment_main.xml Activity_line_chart.xml Fragment_line_chart.xml
Hellocharts-android Open Source Chart library (a) line chart